EditText被键盘遮挡了。

4
我在层次结构中有一个EditText。
<CoordinateLayout>
...
    <NestedScrollView>
    ...
        <RelativeLayout> <!-- This is inside an included xml layout -->
        ...
            <EditText
                android:id="@+id/rateCalculator"
                android:layout_width="wrap_content"
                android:layout_height="48dp"
                android:background="@color/colorPrimary"
                android:inputType="number"
                android:maxLength="5"
                android:gravity="center"
                android:textColor="#FFFFFF"
                android:layout_alignParentBottom="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentRight="true"
                android:layout_alignParentEnd="true"
                android:paddingLeft="60dp" />
        </RelativeLayout>
    </NestedScrollView>
</CoordinateLayout>

EditText获得焦点时,它被Android软键盘遮挡!因此,在输入时无法看到正在输入的内容!

更新:

这是我的清单代码。没有帮助!

<activity
        android:name=".OfferRide"
        android:label="@string/title_activity_offer_ride"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="adjustPan"
        android:theme="@style/AppTheme.NoActionBar" />

enter image description here

enter image description here


1
根据您想要的行为,您可以在清单中的活动声明中使用android:windowSoftInputMode="adjustResize"或android:windowSoftInputMode="adjustPan"。 - andrea.petreri
4个回答

2

以下是完整文档:http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft

本文档介绍了Android活动元素中的"windowSoftInputMode"属性。该属性影响了活动与软键盘之间的交互方式。此外,还介绍了可用于该属性的不同值及其对应的行为。例如,当设置为“adjustResize”时,活动将调整大小以适应软键盘,并根据需要滚动屏幕。
android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] > 

活动主窗口如何与屏幕软键盘的窗口进行交互。此属性的设置影响两个方面:当活动成为用户关注的焦点时,软键盘的状态-隐藏或可见;对活动主窗口所做的调整-是否调整大小以腾出空间放置软键盘,或者其内容是否移动以使当前焦点可见,当软键盘覆盖窗口的一部分时。该设置必须是以下表中列出的值之一,或者是一个“state…”值加上一个“adjust…”值的组合。在任一组中设置多个值(例如多个“state…”值)会产生未定义的结果。各个值由垂直线(|)分隔。例如:
<activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >

这里设置的值(除了"stateUnspecified""adjustUnspecified")将覆盖主题中设置的值。

标志:

  • "stateUnspecified"
  • "stateUnchanged"
  • "stateHidden" - 当活动成为用户关注的焦点时,软键盘的状态(隐藏或可见)。
  • "stateAlwaysHidden"
  • "stateVisible"
  • "stateAlwaysVisible"
  • "adjustUnspecified"
  • "adjustResize"

有时Java也会这样做:

EditText edtView=(EditText)findViewById(R.id.editTextConvertValue);
    edtView.setInputType((InputType.TYPE_NULL);

看一下: https://dev59.com/C2025IYBdhLWcg3wQDhb#6122733

没什么帮助!还是一样的! - Sibidharan
我找到了答案。EditText中的gravity是导致错误的原因。移除它可以解决问题!我来回答这个问题。感谢你的帮助。 - Sibidharan

2

EditText中移除gravity后,它就正常了!这似乎是一个bug。

<EditText
    android:id="@+id/rateCalculator"
    android:layout_width="wrap_content"
    android:layout_height="48dp"
    android:background="@color/colorPrimary"
    android:inputType="number"
    android:maxLength="5"
    android:textColor="#FFFFFF"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:paddingLeft="60dp" />

我认为这不是一个 bug,而是一个拼写错误或者你可能没有注意到或者写错了什么,但是,我的答案在去掉重力后可以正常工作? - ʍѳђઽ૯ท
3
除了消除重力,没有其他方法可行!我在网上做了一些研究,发现这是一个bug!感谢@LinX64的努力。 - Sibidharan
1
同意这是一个bug。我还观察到android:inputType和android:gravity不能同时使用。因此解决方案是删除其中一个。 - kasurd
1
还找到了密码输入类型的解决方案。因此,您可以删除android:inputType="textPassword"并在代码中设置它,如下所示:mEtPassword.setTransformationMethod(new PasswordTransformationMethod()); 现在键盘可以正常工作了。 - kasurd

1
你可以尝试在AndroidManifest中使用adjustPan和adjustResize选项来调整windowSoftInputMode,具体如下:

<activity
    ...
    android:windowSoftInputMode="adjustPan" >
</activity>

你可以从这里了解更多相关信息。

1
我认为问题是由于NoActionBar主题,使活动全屏影响了adjustpan、resize..功能的工作。请参考此问题 - Ichigo Kurosaki

0
根据您想要的行为,您可以在清单文件中的活动声明中使用android:windowSoftInputMode="adjustResize"或android:windowSoftInputMode="adjustPan"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接