我有一个使用自定义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 和{{1 }}按钮应始终可见。
我该怎么做?
我已经尝试过类似的东西
AlertDialog
android:fitsSystemWindows="true"
android:windowSoftInputMode="adjustResize"
但没有任何效果。
使用android:windowSoftInputMode="adjustPan"
会导致不同设备出现问题。 maxlines的数量各不相同。
答案 0 :(得分:0)
您需要对{strong> setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
AlertDialog
示例代码
活动
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()
}
}
对话框布局文件
<?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>
答案 1 :(得分:0)
您的问题是inputType
删除该行,然后尝试使用此代码
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter a comment"
android:background="@android:color/transparent"
android:maxHeight="90dp"/>
更新:
edittext.setScroller(new Scroller(myContext));
edittext.setMaxLines(5);
edittext.setVerticalScrollBarEnabled(true);
edittext.setMovementMethod(new ScrollingMovementMethod());
通过这种方法,您可以获得键盘的动态高度,并且可以基于屏幕的总高度来设置edittext的静态高度%
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){
public void onGlobalLayout(){
int heightDiff = root.getRootView().getHeight()- root.getHeight();
// IF height diff is more then 150, consider keyboard as visible.
}
});
仅在android:windowSoftInputMode="adjustResize"
答案 2 :(得分:0)
尝试以下解决方案:
通过将以下方法添加到活动类中来获取设备的高度
public int getHeight(){
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
return height;
}
根据设备高度设置MaxHeight,这样就可以通过将此代码块添加到onCreate()方法中,从而在较大的设备(如平板电脑)上不会造成任何问题。
EditText editText = findViewById(R.id.editText); //The EditText in the Layout
editText.setMaxHeight(getHeight()/3); //
XML可以,但是不要忘记将id添加到editText