繁体   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