第二次点按键盘上的Android编辑文字

时间:2017-07-31 03:49:26

标签: java android android-edittext keyboard

所以我有一个EditText,第一次没有被键盘覆盖。然后当您关闭键盘并再次点击edittext时,它将覆盖edittext。

我花了几个小时研究这个问题并得出结论它与编辑文本的这两个属性有关。

android:inputType="number"
android:gravity="center"

如果我删除其中任何一个,adjustPan(如我的清单中所示)始终按照承诺运行。似乎是一个Android错误。但是我在编辑文本中需要这两行。解决这个问题的最佳方法是什么?

这是xml的稍微浓缩版本:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">


<LinearLayout
    android:id="@+id/buttons_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal"
    android:weightSum="5">

    <android.support.v7.widget.AppCompatButton
        android:id="@+id/generate_button"
        android:layout_width="match_parent"
        android:layout_height="@dimen/button_height"
        android:layout_marginBottom="@dimen/button_margin"
        android:layout_marginEnd="0dp"
        android:layout_marginLeft="@dimen/button_margin"
        android:layout_marginRight="0dp"
        android:layout_marginStart="@dimen/button_margin"
        android:layout_marginTop="@dimen/button_margin"
        android:layout_weight="1"
        android:background="@color/buttonColor"
        android:elevation="@dimen/button_elevation"
        android:foreground="?attr/selectableItemBackground"
        android:text="@string/generate"
        android:textColor="@color/colorPrimary"
        android:textSize="@dimen/generate_button_title_size"
        android:textStyle="bold" />

    <android.support.v7.widget.AppCompatImageButton
        android:id="@+id/copy_button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="@dimen/button_margin"
        android:layout_weight="4"
        android:adjustViewBounds="true"
        android:background="@color/buttonColor"
        android:elevation="@dimen/button_elevation"
        android:foreground="?attr/selectableItemBackground"
        android:padding="@dimen/button_margin"
        android:scaleType="fitCenter"
        android:src="@drawable/ic_copy"
        android:tint="@color/colorPrimary" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@id/buttons_layout"
    android:orientation="vertical"
    android:weightSum="10">

    <GridLayout
        android:id="@+id/grid_layout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_gravity="center"
        android:layout_weight="6"
        android:animateLayoutChanges="true">
    </GridLayout>


    <TextView
        android:id="@+id/total_text_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:gravity="center"
        android:text="11"
        android:textSize="@dimen/toolbar_title_size"
        android:textStyle="bold" />

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_gravity="center"
        android:layout_weight="2"
        android:textColorHint="@color/textColorHint">

        <EditText
            android:id="@+id/num_rolls_edit_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:hint="@string/number_of_rolls"
            android:inputType="number"
            android:maxLength="@integer/edit_text_max_length"
            android:maxLines="1"
            android:text="4"
            android:textColor="@color/textColor"
            android:textSize="@dimen/edit_text_text_size"/>

    </android.support.design.widget.TextInputLayout>

</LinearLayout>

每次都应该是这样的...... enter image description here

这是目前第二次点击时的样子(键盘覆盖edittext)... enter image description here

编辑:我发现使用Android 7.0时键盘工作正常。我不认为它适用于任何低于此值的东西。这是最近修复过的错误吗?

另外,我已经包含了android:windowSoftInputMode =&#34; adjustPan | stateHidden&#34;在我的应用程序和活动部分,我的清单,但似乎没有解决它。

7 个答案:

答案 0 :(得分:4)

在您的清单中添加此活动。它工作正常

 <activity android:name=".Views.UI.MainActivity"
        android:windowSoftInputMode="stateHidden|adjustResize">

答案 1 :(得分:3)

尝试将adjustPan更改为adjustResize清单文件中的活动配置,正如document建议的那样。

  

这个(adjustPan)通常不如调整大小,因为用户可能需要关闭软键盘才能进入并与窗口的模糊部分进行交互。

修改

如果您不希望在打开键盘时压缩/调整视图,请向根ScrollView添加RelativeLayout。因此,当adjustResize相应地滚动视图而不是“粉碎”它们时。

希望这有帮助!

答案 2 :(得分:2)

在你的第一个截图中,文字&#34; Dice&#34;切换,在第二个,editText被覆盖,&#34;骰子&#34;如图所示,请考虑删除标题editText&#34; Dice&#34;?

此外,我发现您使用了scrollView,并表示您可以使用d ={chr(i+97):x for i, x in enumerate(input().split())} ,是否可以将其替换为AlignParentBottom

答案 3 :(得分:1)

我认为你没有在XML中使用滚动视图,如果你做的比你需要制作一些代码android mainfeast。 <activity android:name=".activity.ActivityProductDetail" android:windowSoftInputMode="stateAlwaysHidden|adjustResize" />

答案 4 :(得分:1)

带有RelativeLayout

alignParentBottom和多个观点总是有问题的,尤其是键盘。我建议使用scrollview并在LinearLayout内添加视图,其中按钮位于结尾处,但不一定位于视图的底部。

然后您甚至不需要使用adjustPan。类似的东西:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

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

    <!-- grid view + textview + textEdit + your buttons at the end -->

</LinearLayout>

答案 5 :(得分:1)

您可以将布局添加到ScrollView并收听onGloablLayout()回调。如果rootview和你的视图的高度差异大于100像素,它可能是键盘,你可以滚动到你的EditText所以它不会被键盘阻挡。

final View layout = findViewById(R.id.layoutparentID);
    layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int heightDiff = layout.getRootView().getHeight() - layout.getHeight();
            if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...

                final Runnable r = new Runnable() {
                    public void run() {
                        scrollView.smoothScrollTo(0, editText.getBottom());
                    }
                };
                activityRootView.getHandler().postDelayed(r, 100);
            }
        }
    });

答案 6 :(得分:1)

检查此代码,隐藏软键盘

 try {
        View view = this.getCurrentFocus();
        if (view != null) {
            InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }