Android软键盘涵盖EditText字段


Answers:


163

您是否在问如何控制软键盘打开时可见的内容?您可能需要使用windowSoftInputMode。有关更多讨论,请参见开发人员文档


2
这可以正常工作,但是如果您使用自定义对话框样式,请确保对话框样式中具有<item name =“ android:windowIsFloating”> true </ item>。
Dmitry Chistyakov

看来这在横向模式(Nexus 7)中不起作用,可编辑元素隐藏在键盘下方。我尝试了windowSoftInputMode的不同组合。似乎我无法设置windowIsFloating,因为ActionBar不支持它。或者它也可能与我的EditText位于列表视图项内部有关?
Sampo Sarrala-codidact.org 2014年

在其中添加<item name =“ android:windowTranslucentStatus”> true </ item>后,此方法将无效。有人解决吗?
最多

1
@Max添加android:fitsSystemWindows="true"到您的根视图以解决此问题。
David Passmore

1
当有可用的软键盘时,如何将完整的布局拉到键盘上方,不管是什么
Whatsapp

162

我有同样的问题。尝试以下代码:

android:windowSoftInputMode="adjustPan"

将其添加到保存输入的活动的活动标签中的manifest.xml中。例:

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

14
最简单的答案!只是要注意,这需要添加到清单文件中以及我们想要的活动下。
NRR 2014年

4
就我而言,这至少不会像那样弄乱我的html adjustResize,但它也涵盖了我的输入字段
Rahul Dole 2014年

8
这对我没有帮助
vikifor

1
@vikifor,请确保将您的edittext添加到scrollview。即使布局中只有3-4个字段,也要将所有字段添加到scrollview中。当虚拟键盘打开时,这使其可滚动。
Kuldeep Sakhiya 2015年

工作正常,但是每当我触摸EditText视图时,键盘都会重绘。
伊克巴尔

55

当软键盘位于屏幕底部的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。这样会将整个用户界面上移,以便为软键盘留出空间。


但是,如果您的css大部分具有百分比值,则这可能会使html的外观混乱
Rahul Dole 2014年

您在这里猜测还是尝试过?顺便说一句,它不应该弄乱你的HTML。我已经尝试过使用webviews。它将改变整个观点而不是单个元素。
DanKodi

1
我尝试过这个。我认为发生这种情况是因为我的css主要具有百分比值
Rahul Dole 2014年

@DanKodi我尝试过,adjustResize|stateHidden与没什么区别adjustPan
IgorGanapolsky

25

为什么不尝试添加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,但这取决于您。另外,将滚动条样式设置为outsideInset至少对我的设备有所帮助。


4
尽管Mayra的答案是每个人都应该做的(也许是Google认为每个人都应该做的),但这几乎是我每次都要做的。这是获得正确显示所需的真正控制的唯一方法。叹。
Scott Biggs

不要小看斯科特的评论。是真的。在我的情况下,我不想调整大小或平移列表视图,但想在列表末尾使用editText。因此,我已将editText放入scrollView中,并且按预期工作。
达尔潘

15

您需要做的就是

android:isScrollContainer="true"

来源:http : //www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/


1
虽然答案本身并没有多大帮助(不需要属性),但链接的源代码中包含完整的解释(表单应嵌入ScrollView中)。谢谢!
约翰多多

同样,页面上没有任何帮助,但该链接显示将adjustResize添加到活动windosSoftInputMode中并且可以正常工作。
史蒂文·史密斯

14

很抱歉,要恢复旧线程,但android:imeOptions="flagNoFullscreen"您的EditText元素中没有人提及设置


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

适用于android EditText,而不适用于webview或xwalkview。当软键盘在您使用的webview或xwalkview中隐藏输入时android:windowSoftInputMode="adjustResize"


4

我相信您可以使用轨迹球来滚动它,这最终可能会通过选择方法以编程方式实现,但这只是一个想法。我知道轨迹球方法通常可以使用,但是对于执行此操作并使它通过代码运行的确切方法,我不确定。
希望有帮助。


我想我需要的是一种使窗口“人为地”变长以便视图可以滚动的方法。目前RelativeLayout设置为android:layout_width =“ wrap_content” android:layout_height =“ wrap_content”
Alexis 2010年

那我不知道解决方案。也许您可能想通过将宽度和高度值进一步扩展到“ wrap_content”要解决的值来手动调整宽度和高度值。
路易斯·米格尔·塞拉诺

1

将此单行添加到您的相对活动中,其中键盘盖会在活动的onCreat()方法内编辑text。

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

0

我知道这很旧,但是以上解决方案都不适合我。经过大量调试后,我发现了问题所在。解决方案是android:windowTranslucentStatus在我的styles.xml 中将属性设置为false


0

如果键盘覆盖了EditText字段,请使用以下代码:

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

如果您希望将光标放在Focused EditText中,则不要EditText.requestFocus()在之后使用 ,EditText?.getParent()?.requestChildFocus(EditText,EditText) 这有助于在Focused EditText中获得焦点和Cursor。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.