Android 键盘隐藏 EditText

Posted

技术标签:

【中文标题】Android 键盘隐藏 EditText【英文标题】:Android Keyboard hides EditText 【发布时间】:2014-08-07 09:11:59 【问题描述】:

当我尝试在屏幕底部的 EditText 中写入内容时,软键盘会隐藏 EditText。我该如何解决这个问题?下面是我的xml代码。我在 Fragment 中使用它。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_
        android:layout_ >


        <LinearLayout
            android:id="@+id/linearLayoutTopDetails"
            android:layout_
            android:layout_
            android:layout_below="@+id/linearLayoutTop"
            android:layout_marginLeft="6dp"
            android:layout_marginRight="6dp"
            android:layout_marginTop="6dp"
            android:orientation="vertical" >

            <LinearLayout
                android:layout_
                android:layout_
                android:background="@drawable/list_design1"
                android:orientation="vertical" >

                <LinearLayout
                    android:layout_
                    android:layout_
                    android:layout_weight="100"
                    android:orientation="horizontal" >

                    <ImageView
                        android:id="@+id/ImageViewProfImagePostDetail"
                        android:layout_
                        android:layout_
                        android:layout_marginTop="2dp"
                        android:layout_weight="24.84"
                        android:paddingLeft="5dp"
                        android:paddingRight="5dp"
                        android:paddingTop="5dp" />

                    <LinearLayout
                        android:layout_
                        android:layout_
                        android:layout_weight="60"
                        android:orientation="vertical" >

                        <TextView
                            android:id="@+id/textViewNamePostDetail"
                            android:layout_
                            android:layout_
                            android:text="Robin"
                            android:textSize="17sp" />

                        <TextView
                            android:id="@+id/textViewLocationPostDetail"
                            android:layout_
                            android:layout_
                            android:layout_marginTop="1dp"
                            android:drawableLeft="@drawable/location"
                            android:text="beijing, China" />

                        <TextView
                            android:id="@+id/textViewTimeAgoPostDetail"
                            android:layout_
                            android:layout_
                            android:text=" 18min ago" />
                    </LinearLayout>

                    <LinearLayout
                        android:layout_
                        android:layout_
                        android:layout_weight="15"
                        android:orientation="horizontal" >

                        <TextView
                            android:id="@+id/textViewReportAbusePostDetail"
                            android:layout_
                            android:layout_
                            android:layout_gravity="center"
                            android:background="@drawable/flag"
                            android:paddingLeft="5dp" />

                        <TextView
                            android:id="@+id/textViewDeletePostDetail"
                            android:layout_
                            android:layout_
                            android:layout_gravity="center"
                            android:layout_marginLeft="15dp"
                            android:background="@drawable/delete"
                            android:visibility="gone" />
                    </LinearLayout>
                </LinearLayout>

                <TextView
                    android:id="@+id/textViewDescriptionPostDetail"
                    android:layout_
                    android:layout_
                    android:layout_marginLeft="20dp"
                    android:layout_marginTop="2dp"
                    android:singleLine="false"
                    android:text="Description or caption of the post"
                    android:textSize="17sp" />
            </LinearLayout>

            <ImageView
                android:id="@+id/feedPostedImagePostDetail"
                android:layout_
                android:layout_
                android:layout_marginTop="5dp"
                android:scaleType="fitCenter"
                android:visibility="gone" />

            <LinearLayout
                android:id="@+id/linearLayoutOptions"
                android:layout_
                android:layout_
                android:layout_marginTop="2dp"
                android:layout_weight="100"
                android:background="@drawable/bar"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/textViewShakePostDetail"
                    android:layout_
                    android:layout_
                    android:layout_marginLeft="15dp"
                    android:layout_weight="25"
                    android:drawableLeft="@drawable/like"
                    android:gravity="center"
                    android:singleLine="true"
                    android:text="Shake"
                    android:textSize="12sp" />

                <TextView
                    android:id="@+id/textViewCommentPostDetail"
                    android:layout_
                    android:layout_
                    android:layout_weight="41"
                    android:drawableLeft="@drawable/comment"
                    android:gravity="center"
                    android:paddingLeft="20dp"
                    android:text="Comment" />

                <TextView
                    android:id="@+id/textViewSharePostDetail"
                    android:layout_
                    android:layout_
                    android:layout_weight="33"
                    android:drawableLeft="@drawable/share"
                    android:gravity="center"
                    android:paddingLeft="20dp"
                    android:text="Spread" />
            </LinearLayout>
        </LinearLayout>

        <ListView
            android:id="@+id/listViewFeedsDetail1"
            android:layout_
            android:layout_
            android:layout_below="@+id/linearLayoutTopDetails"
            android:layout_marginBottom="4dp"
            android:layout_marginLeft="6dp"
            android:layout_marginRight="6dp"
            android:layout_marginTop="6dp" >
        </ListView>

        <LinearLayout
            android:id="@+id/linearLayoutPostcomment"
            android:layout_
            android:layout_
            android:layout_below="@+id/listViewFeedsDetail1"
            android:background="#FFFFFF"
            android:orientation="horizontal"
            android:weightSum="100" >

            <EditText
                android:id="@+id/editTextComment"
                android:layout_
                android:layout_
                android:layout_weight="80" />

            <Button
                android:id="@+id/buttonPostComment"
                android:layout_
                android:layout_
                android:layout_weight="20"
                android:background="#F0F8FF"
                android:text="Post" >
            </Button>
        </LinearLayout>
    </RelativeLayout>
</ScrollView>

我已尝试通过代码添加更改来解决此问题,但没有成功。

下面是点击EditText前后的图片。

【问题讨论】:

滚动视图不起作用。 将此属性:android:windowSoftInputMode="adjustPan|adjustResize" 添加到 AndroidManifest.xml 中的 Activity 标记 Android soft keyboard covers edittext field 的可能重复项 @HareshChhelana 我认为应该使用 adjustPan 或 adjustResize ,而不是同时使用两者。它们是相互矛盾的 设置adjustPan 模式时,这似乎是android 中的一个错误尝试此自定义EditText 并解决此问题gist.github.com/Arjun-sna/768de4ca141798c59a8166a2e5d4a743 【参考方案1】:

在清单中,在特定的活动标签上添加这一行:

 android:windowSoftInputMode="adjustPan" 

【讨论】:

我试过这个但没有成功。 android:windowSoftInputMode="adjustPan|adjustResize" 此代码仍在我的清单中。但仍在隐藏 editText。 @RobinRoyal JFTR,adjustPan|adjustResize 与单独的 adjustPan 不同。事实上,如果其他用户后来所说的是真的,那么你永远不应该混合两个 adjust* 状态。【参考方案2】:

为此,您必须在活动清单中声明

         <activity
            android:name=".activityname"
            android:label="@string/app_name"
            android:windowSoftInputMode="adjustPan|adjustResize" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

【讨论】:

这是我的活动清单代码。 这仍然是隐藏editText。 这是片段而不是活动。我应该在哪里做呢?我已经将此代码放置在放置片段的活动中。 @RobinRoyal 可能是我迟到了,但是(我对其他人有用)使用adjustPan 或adjustResize,而不是同时使用两者 不要将两个“调整...”值设置在一起,如文档所述:设置必须是下表中列出的值之一,或一个“状态...”的组合值加上一个“调整...”值。在任一组中设置多个值(例如,多个“状态...”值)具有未定义的结果。 这里是更多信息的文档:developer.android.com/training/keyboard-input/visibility【参考方案3】:

这里是简单的解决方案,解决Android EditText 隐藏在软键盘后面的问题。 使用项目模块的AndroidManifest.xml文件中的代码。

<activity
        android:name="com.example.MainActivity"
        android:label="@string/activity_main"
        android:windowSoftInputMode="adjustResize|stateHidden" />

这段代码对我有用。 在活动标签的清单文件中添加这个属性:

android:windowSoftInputMode="adjustResize|stateHidden"

此属性 (android:windowSoftInputMode) 有更多此类值,它们将作为推荐列表出现。您也可以与他们核实。

【讨论】:

【参考方案4】:

在 manifest.xml 文件中声明 windowSoftInputMode="adjustResize"

<activity
        android:name=".example"
        android:theme="@style/AppTheme.NoActionBar"
        android:windowSoftInputMode="adjustResize" />

为 xml 布局文件提供滚动视图

<RelativeLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         xmlns:tools="http://schemas.android.com/tools"
         android:layout_
         android:layout_
         android:paddingBottom="16dp"
         android:paddingLeft="16dp"
         android:paddingRight="16dp"
         android:paddingTop="16dp"
         android:fitsSystemWindows="true">

<ScrollView
        android:layout_
        android:layout_
        android:fillViewport="true"
        android:isScrollContainer="false">

   // add edittext here...

 </ScrollView>
 </RelativeLayout>

【讨论】:

【参考方案5】:

使用以下代码:

InputMethodManager ipmm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                ipmm.hideSoftInputFromWindow(url.getWindowToken(), 0);

我的代码中的 url 是:

url = (EditText) findViewById(R.id.eT_webbrowser);

或试试这个:

InputMethodManager ipmm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    ipmm.hideSoftInputFromWindow(null, 0);

作为另一个选项试试这个:这总是隐藏软输入模式,这样你的 EditText 是可见的

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

【讨论】:

@Robin Royal - 如果它适合你,请接受它作为答案。 我没听懂你。但是,您是否也尝试使用“null”作为检查选项? 是的,我试过了。当我点击 EditText 写东西时。软键盘显示但它隐藏了 EditText。实际上 EditText 没有在软键盘上向上滚动。EditText 停留在底部屏幕。 试试这个。在我的答案中也进行了编辑: this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_AL‌​WAYS_HIDDEN); – 罗摩基什纳巴拉 仍然没有发生任何事情。谢谢【参考方案6】:

我通过在 View 周围添加带有 EditText 的 ScrollView 来处理这个问题。

<ScrollView
        android:layout_
        android:layout_
        >
        // Other views
        <EditText ... />
</ScrollView>

向 Android Manifest 添加标签对我没有帮助。

【讨论】:

【参考方案7】:

对我来说,解决方案是简单地将其添加到父布局中: android:fitsSystemWindows="true"

【讨论】:

【参考方案8】:

将此行放在您的应用程序标签中:-

android:windowSoftInputMode="stateHidden|adjustPan"

例子:-

<application
    android:name=".application.MyApplication"
    android:allowBackup="false"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:networkSecurityConfig="@xml/network_security_config"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="false"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden|adjustPan"
    tools:ignore="GoogleAppIndexingWarning"
    tools:replace="android:supportsRtl,android:allowBackup"
    tools:targetApi="n">

【讨论】:

【参考方案9】:

在您的活动清单文件中添加这一行,看看它的神奇之处。

android:windowSoftInputMode="stateAlwaysHidden|adjustResize"

【讨论】:

【参考方案10】:

试试这个,可能对你有帮助。

将以下行添加到您的 EditText

android:paddingVertical="16dp"

【讨论】:

以上是关于Android 键盘隐藏 EditText的主要内容,如果未能解决你的问题,请参考以下文章

Android 键盘隐藏 EditText

Android之弹出/隐藏系统软键盘

Android 隐藏输入法键盘

键盘布局隐藏android操作栏?

如何使用 JavaScript 隐藏 Android 键盘?

在kivy中隐藏android键盘