簡體   English   中英

顯示鍵盤時以固定高度調整 EditText 的大小

[英]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中刪除這些屬性:

android:layout_height="300dp" 
android:adjustViewBounds="true"
android:minHeight="150dp"

然后,添加這些:

android:layout_height="0dp"
app:layout_constraintHeight_min="150dp"
app:layout_constraintHeight_max="300dp"

這將確保您的EditText (此處顯示為白色背景)在空間很大時消耗 300dp:

在此處輸入圖像描述

並在空間較小時縮小(最小為 150dp):

在此處輸入圖像描述

也許你會在這里找到答案:
如何更改 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM