java - 输入长文本后,具有自定义 View 的 AlertDialog 消失在软键盘后面

标签 java android xml android-alertdialog

我有一个简单的AlertDialog,其中包含此自定义View:

enter image description here

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="20dp"
    android:layout_alignParentTop="true">

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Enter a comment"
    android:linksClickable="true"
    android:background="@android:color/transparent"
    android:inputType="textMultiLine"
    android:scrollbars="vertical"/>

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"

    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:orientation="horizontal"
        android:gravity="center"
        >

        <ImageView
            android:id="@+id/imageview_bold"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_margin="10dp"
            android:src="@drawable/bold_b" />

        <ImageView
            android:id="@+id/imageview_italic"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_margin="10dp"
            android:src="@drawable/italic_i" />


        <ImageView
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:id="@+id/imageview_underlined"
            android:layout_margin="10dp"
            android:src="@drawable/underlined_u"/>


        <ImageView
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:id="@+id/add_link"
            android:layout_margin="10dp"
            android:src="@mipmap/ic_launcher_link"/>


    </LinearLayout>

</HorizontalScrollView>

</LinearLayout>

问题

长文本会导致AlertDialog隐藏在软键盘后面。 enter image description here

FormattingBar(B I U 链接)也被隐藏,仅在显示短文本时可见。

AlertDialog 应始终停留在软键盘上方,如果文本太长,EditText 必须可滚动,但 FormattingBarAlertDialog 按钮应始终可见。

enter image description here

我该怎么做?

我已经尝试过类似的东西

android:fitsSystemWindows="true"

android:windowSoftInputMode="adjustResize"

android:windowSoftInputMode="adjustPan"

但没有任何效果。

使用 maxLines 会导致不同设备出现问题。最大行数各不相同。

最佳答案

您需要对您的AlertDialog使用setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)

示例代码

Activity

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.WindowManager
import androidx.appcompat.app.AlertDialog

class MainActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        showAlertDialog(this)

    }

    private fun showAlertDialog(
            context: Context
    ) {
        val dialogBuilder = AlertDialog.Builder(context)

        dialogBuilder.setView(R.layout.aa)

        val dialog = dialogBuilder.create()
        dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
        dialog.show()
    }

}

dialog layout file

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fillViewport="true"
    android:orientation="vertical"
    android:scrollbars="vertical"
    android:padding="20dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="20dp">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:hint="Enter a comment"
            android:inputType="textMultiLine"
            android:linksClickable="true"
            android:scrollbars="vertical" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/imageview_bold"
                android:layout_width="35dp"
                android:layout_height="35dp"
                android:layout_margin="10dp"
                android:src="@mipmap/ic_launcher_round" />

            <ImageView
                android:id="@+id/imageview_italic"
                android:layout_width="35dp"
                android:layout_height="35dp"
                android:layout_margin="10dp"
                android:src="@mipmap/ic_launcher_round" />


            <ImageView
                android:id="@+id/imageview_underlined"
                android:layout_width="35dp"
                android:layout_height="35dp"
                android:layout_margin="10dp"
                android:src="@mipmap/ic_launcher_round" />


            <ImageView
                android:id="@+id/add_link"
                android:layout_width="35dp"
                android:layout_height="35dp"
                android:layout_margin="10dp"
                android:src="@mipmap/ic_launcher_round" />


        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="35dp"
                android:layout_height="35dp"
                android:layout_margin="10dp"
                android:src="@mipmap/ic_launcher_round" />

            <ImageView
                android:layout_width="35dp"
                android:layout_height="35dp"
                android:layout_margin="10dp"
                android:src="@mipmap/ic_launcher_round" />


            <ImageView
                android:layout_width="35dp"
                android:layout_height="35dp"
                android:layout_margin="10dp"
                android:src="@mipmap/ic_launcher_round" />


            <ImageView
                android:layout_width="35dp"
                android:layout_height="35dp"
                android:layout_margin="10dp"
                android:src="@mipmap/ic_launcher_round" />


        </LinearLayout>

    </LinearLayout>

</ScrollView>

关于java - 输入长文本后,具有自定义 View 的 AlertDialog 消失在软键盘后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57256315/

相关文章:

java - 为什么在 Android 后使用异步 HTTP

sql - 将 xml 列中的数据插入临时表

java - 编译 Play 2.x - Java 应用程序超时(15 分钟)| Heroku 和 Play 框架

java - Oracle:Java:强制 “select … for update” 在找到匹配项之前不返回

Android 操作栏可检查菜单项无法正常工作/显示?

android - 如何使 Android Jetifier 与数据绑定(bind)一起工作?

java - 在android中使用HTTPClient处理Post请求时获取 "Couldn' t从STDIN读取CGI输入

java - 似乎无法绕过 java.lang.ArrayIndexOutOfBoundsException : -1

c++ - 如何为自定义 istream/streambuf 实现 seekg()?

java - Spring mvc xml配置错误