[英]Resize EditText with fixed height when keyboard is shown
我有一個屏幕,上面有一個小文本,下面有一個 editText,屏幕底部有一個按鈕。 editText 視圖應該有一個給定的高度(大約 30% 的屏幕大小),但是當我打開鍵盤時,按鈕將被向上推(應該如此)並與 editText 重疊。 當鍵盤出現時,如何使 editText 自行調整大小,使其不會與按鈕重疊? 我試着給它一個最小和最大高度,但這並沒有影響它,可能是因為固定高度。
我的代碼:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="text"
android:layout_marginStart="20dp"
android:textAppearance="@style/TextAppearance.AppTheme.Job.Subtitle"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="300dp"
android:windowSoftInputMode="stateVisible|adjustNothing"
android:adjustViewBounds="true"
android:minHeight="150dp"
android:layout_marginHorizontal="20dp"
android:layout_marginTop="20dp"
android:padding="5dp"
android:gravity="top"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text"
app:layout_constraintVertical_bias="0" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="56dp"
android:layout_marginEnd="56dp"
android:layout_marginBottom="14dp"
tools:visibility="visible"
android:backgroundTint="@color/button_color"
android:enabled="false"
android:text="@string/content_feedback_button_text"
android:textColor="@color/white"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:tint="@color/white" />
也許你會在這里找到答案:
如何更改 EditText 和 Button 的高度?
提到使用“android:layout_height”而不是“android:heigt”。
還要注意,不要使用“wrap_content”,如果里面的字體太大,也不要減小 TextEdit 的大小。
這是一些提示,為什么這可能不起作用。
另外,您如何檢查鍵盤的可見性? 如果您目前還沒有解決方案,此鏈接可以提供幫助:
如何檢測軟件鍵盤在 Android 設備上是否可見?
如何檢查 Android 中軟件鍵盤的可見性?
也許在較新的 SDK 中有更簡單的方法,但要參考鏈接,它是通過屏幕上的差異處理的:
final View activityRootView = findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
if (heightDiff > dpToPx(this, 200)) { // if more than 200 dp, it's probably a keyboard...
// ... do something here
}
}
});
然后像這樣使用它:
public static float dpToPx(Context context, float valueInDp) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, valueInDp, metrics);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.