我有一个简单的AlertDialog
,其中包含此自定义View
:
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>
问题
FormattingBar(B I U 链接)也被隐藏,仅在显示短文本时可见。
AlertDialog
应始终停留在软键盘上方,如果文本太长,EditText
必须可滚动,但 FormattingBar 和 AlertDialog
按钮应始终可见。
我该怎么做?
我已经尝试过类似的东西
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/