如何强制软键盘不要在edittext下隐藏textview / counter?

时间:2019-06-02 17:41:11

标签: android android-edittext android-softkeyboard

问题在于, Android键盘在打开时将textview隐藏在edittext下(而不是edittext本身!)

这是我的布局示例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".MainActivity">


    <android.support.v4.widget.NestedScrollView
        android:id="@+id/nestedScrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/big_image"
                android:layout_width="200dp"
                android:layout_height="600dp"
                android:layout_centerHorizontal="true"
                android:background="@color/colorPrimary"
                android:src="@drawable/ic_launcher_foreground"/>


            <android.support.design.widget.TextInputLayout
                android:id="@+id/comment_input_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/big_image">

                <EditText
                    android:id="@+id/comment_edittext_view"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="your comment"
                    android:imeOptions="actionDone"
                    android:maxLength="250"/>
            </android.support.design.widget.TextInputLayout>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/comment_input_layout"
                android:text="0/250"/>
        </RelativeLayout>

    </android.support.v4.widget.NestedScrollView>
</LinearLayout>

下面的图片很清楚:

screen without keyboard

actual behavior

expected behavior

我在stackoverflow上发现了几个类似的问题,但都没有解决方案:( 请帮我解决这个问题! 请确保我考虑了android:windowSoftInputMode="adjustPan"的所有建议 或android:windowSoftInputMode="adjustResize"android:focusableInTouchMode="true"android:fitsSystemWindows="true" 或以framelayout为根,将此文本视图与edittext布局分开添加,

但是问题有点复杂。

另一个重要的事情是,edittext下面的文本应该

  • 当文本在另一行上时保持在键盘上方

  • 在edittext向上滚动时消失(因为它是edittext的一部分)。

3 个答案:

答案 0 :(得分:1)

您也可以使用该设计来存档您的设计

在XML中,将 TextInputLayout 设置为edittext

                <android.support.design.widget.TextInputLayout
                    android:id="@+id/itFAuthAnswer"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/_5sdp"
                    app:passwordToggleEnabled="true"
                    app:counterEnabled="true"// add this 
                    app:counterMaxLength="250" //add this
                    app:hintTextAppearance="@style/AppTextInputHintLabelStyle">

                    <EditText
                        android:id="@+id/etName"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:hint="@string/et_auth_f_que_hint"
                        android:imeOptions="actionDone"
                        android:singleLine="true"/>
                </android.support.design.widget.TextInputLayout>

这行代码以不同的方式解决了您的问题,也适合您的醋栗设计。

app:counterEnabled="true"// make it true
app:counterMaxLength="250"//set your limit

学习愉快...

答案 1 :(得分:1)

我遇到了同样的问题。我已经log a ticket对此材料了。 多亏了我出色的同事的建议,我才申请了“ hack”: 每当呈现布局时,我都单击具有计数器的字段(这是我布局的最后一个字段),以编程方式将其滚动到底部,这样键盘就不再隐藏计数器了。

以下是我程序的不同代码段,您可以参考:

    override fun onFocusChange(p0: View?, isOnFocus: Boolean) {
    if (isOnFocus.not() && getDescription().isEmpty()) {
        tnDescriptionLayout.error = resources.getString(R.string.description_error_message)
        tnDescriptionLayout.isErrorEnabled = true
    } else {
        tnDescriptionLayout.isErrorEnabled = false

        llayout.postDelayed(object : Runnable {
            override fun run() {
                var v =
                    tnDescriptionLayout.findViewById<AppCompatTextView>(R.id.textinput_counter)
                nestedScrollView.smoothScrollBy(0,v.height)
            }

        }, CoreConstants.MINIMUM_VIEW_LOAD_DURATION)
    }
    tvDescription.setText(getDescription())



    lateinit var nestedScrollView: NestedScrollView
    fun change(nestedScrollView: NestedScrollView){
      this.nestedScrollView=nestedScrollView
    }

    paymentOrderContent.change(nestedScrollView = parentView.nestedScrollViewParent)

希望对您有帮助!

答案 2 :(得分:0)

请将此app:counterEnabled="trueapp:counterMaxLength="250"添加到您的TextInputLayout

<android.support.design.widget.TextInputLayout
         android:id="@+id/comment_input_layout"
         android:layout_width="match_parent"
         app:counterEnabled="true"
         app:counterMaxLength="250"
         android:layout_height="wrap_content"
         android:layout_below="@+id/big_image">
   <EditText
      android:id="@+id/comment_edittext_view"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:hint="your comment"
      android:imeOptions="actionDone"
      android:maxLength="250"/> 

编辑:

请在您的清单中尝试使用

android:windowSoftInputMode="stateVisible|adjustResize"