Android 软键盘覆盖 EditText 字段

是否有办法使屏幕滚动允许看到文本字段?

195370 次浏览

我相信你可以通过使用轨迹球来使它滚动,这可能最终通过选择方法以编程的方式实现,但这只是一个想法。我知道轨迹球方法通常可以工作,但是至于具体的方法,并且通过代码使其工作,我不确定。
希望能帮上忙。

您是在问如何控制软键盘打开时可见的内容吗?你可能想玩 WindowSoftInputMode 窗口软输入模式。有关更多讨论,请参见 开发者文件

为什么不尝试添加一个 ScrollView 来包装您想要滚动的内容呢。下面是我是如何做到这一点,其中我实际上离开了顶部的标题,不滚动,而对话框窗口小部件(特别是 EditText)滚动时,你打开软键盘。

<LinearLayout android:id="@+id/HeaderLayout" >
<!-- Here add a header or whatever will not be scrolled. -->
</LinearLayout>
<ScrollView android:id="@+id/MainForm" >
<!-- Here add your edittexts or whatever will scroll. -->
</ScrollView>

我通常在 ScrollView 中有一个 LinearLayout,但这取决于您。此外,将 Scrollbar 样式设置为 outsideInset 也有帮助,至少在我的设备上是这样。

我遇到了同样的问题,软键盘位于屏幕底部的 EditText 视图之上。我能够通过向 AndroidManifest.xml 文件的相关活动添加一行来找到解决方案。

android:windowSoftInputMode="adjustResize|stateHidden"

这是整个活动标签的样子:

<activity
android:name="com.my.MainActivity"
android:screenOrientation="portrait"
android:label="@string/title_activity_main"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>

这里最重要的值是调整大小。这将改变整个用户界面,为软键盘腾出空间。

我也有同样的问题,试试以下代码:

android:windowSoftInputMode="adjustPan"

将其添加到保存 input. example 的 activity 标记中的 Manifent.xml 中:

<activity
android:name=".Activities.InputsActivity"
...
android:windowSoftInputMode="adjustPan"
/>

抱歉重新启动了一个旧线程,但是没有人提到在 EditText 元素中设置 android:imeOptions="flagNoFullscreen"

android:windowSoftInputMode="adjustPan"
android:isScrollContainer="true"

适用于 android EditText,但不适用于 webview 或 xwalk 视图。当软键盘在 webview 或 xwalk 视图中隐藏输入时,必须使用 android:windowSoftInputMode="adjustResize"

将这一行添加到您的相对活动中,其中键盘覆盖在 onCreat ()活动方法中的 edit text.inside。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

编辑 AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

将此添加到布局文件的根视图中。

android:fitsSystemWindows="true"

仅此而已。

我知道这很老套,但是以上的方法对我都不管用。经过大量的调试,我解决了这个问题。 解决方案是在我的 styles.xml 中将 android:windowTranslucentStatus属性设置为 false

如果编辑文本字段已被键盘覆盖,请使用以下代码:

    EditText= findViewById(R.id.edittext)
EditText?.getParent()?.requestChildFocus(EditText,EditText)

如果您希望 光标在聚焦编辑文本中,请在 EditText?.getParent()?.requestChildFocus(EditText,EditText)之后使用 EditText.requestFocus(),这有助于在聚焦编辑文本中获得焦点和光标。

我有同样的问题和搜索的人说,添加 adjustPan,而在我的情况下,adjustResize工作。

<activity
android:name=".YOUR.ACTIVITY"
...
android:windowSoftInputMode="adjustResize"
/>

加上

android:gravity="bottom" android:paddingBottom="10dp"

根据编辑文本的大小更改 paddingBottom

上面的解决方案可以很好地工作,但是如果您使用全屏活动(半透明状态栏) ,那么这些解决方案可能无法工作。 因此,对于全屏,在活动上的 onCreate 函数中使用这段代码。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN , WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN );
getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.TYPE_STATUS_BAR);
}

例如:

  protected void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN , WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN );
getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.TYPE_STATUS_BAR);
}
    

super.onCreate(savedInstanceState);