Android软键盘覆盖了edittext字段

时间:2010-07-21 01:29:14

标签: android android-edittext softkeys

有没有办法让屏幕滚动以允许看到文本字段?

15 个答案:

答案 0 :(得分:154)

您是否在询问如何控制软键盘打开时可见的内容?您可能想要使用windowSoftInputMode。有关详细信息,请参阅developer docs

答案 1 :(得分:151)

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

android:windowSoftInputMode="adjustPan"

将其添加到包含输入的活动的activity标记中的manifest.xml。例如:

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

答案 2 :(得分:52)

我遇到了同样的问题,其中软键盘位于放置在屏幕底部的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。这将改变整个用户界面,为软键盘提供空间。

答案 3 :(得分: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 :(得分:14)

答案 5 :(得分:13)

很抱歉恢复旧帖子,但没有人提到在EditText元素中设置android:imeOptions="flagNoFullscreen"

答案 6 :(得分:5)

sqlite3

适用于Android EditText,但它不适用于webview或xwalkview。当软键盘隐藏webview或xwalkview中的输入时,您使用android:windowSoftInputMode="adjustPan" android:isScrollContainer="true"

答案 7 :(得分:4)

我相信你可以通过使用轨迹球进行滚动,这可能最终通过选择方法以编程方式实现,但这只是一个想法。我知道轨迹球方法通常是有效的,但至于这样做的确切方法并使其在代码中工作,我不确定。
希望有所帮助。

答案 8 :(得分:0)

将此单行添加到您的相对活动中,其中键盘封面编辑text.inside onCreat()活动方法。

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

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

如果您希望将 Cursor 放在Focused EditText中,则比在EditText.requestFocus()之后使用EditText?.getParent()?.requestChildFocus(EditText,EditText)可以帮助在Focused EditText中获得焦点和光标。

答案 11 :(得分:0)

我遇到了同样的问题,并搜索了说要添加adjustPan的人,而在我看来adjustResize起作用了。

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

答案 12 :(得分:0)

只需添加

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

根据您的edittext大小更改paddingBottom

答案 13 :(得分:0)

上述解决方案可以正常工作,但是如果您使用“全屏”活动(半透明状态栏),则这些解决方案可能无法工作。 因此要全屏使用此代码,请在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);

答案 14 :(得分:-1)

编辑您的AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

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

android:fitsSystemWindows="true"

仅此而已。