提问人:Alexis 提问时间:7/21/2010 最后编辑:0xCursorAlexis 更新时间:1/11/2021 访问量:198656
Android 软键盘覆盖 EditText 字段
Android soft keyboard covers EditText field
答:
我相信你可以通过使用轨迹球让它滚动,这最终可以通过选择方法以编程方式实现,但这只是一个想法。我知道轨迹球方法通常有效,但至于执行此操作并使其从代码中工作的确切方法,我不确定。
希望能有所帮助。
评论
您是否在问如何控制软键盘打开时可见的内容?您可能希望使用 windowSoftInputMode。有关更多讨论,请参阅开发人员文档。
评论
android:fitsSystemWindows="true"
为什么不尝试添加一个 ScrollView 来包装您想要滚动的任何内容。这是我是如何做到的,我实际上在顶部留下了一个不滚动的标题,而对话框小部件(特别是 EditTexts)在您打开软键盘时会滚动。
<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>
这里最重要的值是 adjustResize。这将向上移动整个 UI,以便为软键盘留出空间。
评论
adjustResize|stateHidden
adjustPan
我有同样的问题。请尝试以下代码:
android:windowSoftInputMode="adjustPan"
将其添加到保存输入的活动的活动标记中的 manifest.xml 中。例:
<activity
android:name=".Activities.InputsActivity"
...
android:windowSoftInputMode="adjustPan"
/>
评论
adjustResize
很抱歉恢复了旧线程,但没有人提到您的 EditText 元素中的设置android:imeOptions="flagNoFullscreen"
您需要做的就是
android:isScrollContainer="true"
来源: http://www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/
评论
android:windowSoftInputMode="adjustPan"
android:isScrollContainer="true"
适用于 android EditText,而不适用于 webview 或 xwalkview。当软键盘隐藏您使用的 webview 或 xwalkview 中的输入时android:windowSoftInputMode="adjustResize"
将此单行添加到您的相关活动中,其中 Key Board Cover 编辑 text.inside onCreat()活动方法。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
编辑你的 AndroidManifest.xml
android:windowSoftInputMode="adjustResize"
将其添加到布局文件的根视图中。
android:fitsSystemWindows="true"
就这样。
我知道这是旧的,但上述解决方案都不适合我。经过广泛的调试,我发现了问题所在。
解决方案是在我的样式.xml中将属性设置为falseandroid:windowTranslucentStatus
如果 KeyBoard 覆盖了 EditText 字段,请使用以下代码:
EditText= findViewById(R.id.edittext)
EditText?.getParent()?.requestChildFocus(EditText,EditText)
如果您希望光标位于 Focused EditText 中,请在 之后使用,这有助于在 Focused EditText 中获取焦点和光标。EditText.requestFocus()
EditText?.getParent()?.requestChildFocus(EditText,EditText)
我遇到了同样的问题,搜索了说要添加的人,而在我的情况下有效。adjustPan
adjustResize
<activity
android:name=".YOUR.ACTIVITY"
...
android:windowSoftInputMode="adjustResize"
/>
评论
只需添加
android:gravity="bottom" android:paddingBottom="10dp"
根据编辑文本的大小更改 paddingBottom
上述解决方案完美运行,但如果您使用的是全屏活动(半透明状态栏),则这些解决方案可能不起作用。 因此,对于全屏,请在 Activity 的 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);
评论