Android 键盘隐藏 EditText

问题描述 投票:0回答:12

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

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

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >


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

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/list_design1"
                android:orientation="vertical" >

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="80dp"
                    android:layout_weight="100"
                    android:orientation="horizontal" >

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

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="60"
                        android:orientation="vertical" >

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

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

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

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="15"
                        android:orientation="horizontal" >

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

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

                <TextView
                    android:id="@+id/textViewDescriptionPostDetail"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    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_width="fill_parent"
                android:layout_height="200dp"
                android:layout_marginTop="5dp"
                android:scaleType="fitCenter"
                android:visibility="gone" />

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

                <TextView
                    android:id="@+id/textViewShakePostDetail"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    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_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="41"
                    android:drawableLeft="@drawable/comment"
                    android:gravity="center"
                    android:paddingLeft="20dp"
                    android:text="Comment" />

                <TextView
                    android:id="@+id/textViewSharePostDetail"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    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_width="fill_parent"
            android:layout_height="wrap_content"
            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_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/listViewFeedsDetail1"
            android:background="#FFFFFF"
            android:orientation="horizontal"
            android:weightSum="100" >

            <EditText
                android:id="@+id/editTextComment"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="80" />

            <Button
                android:id="@+id/buttonPostComment"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="20"
                android:background="#F0F8FF"
                android:text="Post" >
            </Button>
        </LinearLayout>
    </RelativeLayout>
</ScrollView>

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

下图是点击EditText之前和之后的图像。

screenshot without soft keyboard, EditText visible

screenshot with soft keyboard, EditText hidden

android android-layout android-edittext android-scrollview android-keypad
12个回答
102
投票

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

 android:windowSoftInputMode="adjustPan" 

22
投票

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

         <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>

17
投票

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

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

此代码对我有用。
在活动标记的清单文件中添加此属性:

android:windowSoftInputMode="adjustResize|stateHidden"

此属性还有更多此类值 (

android:windowSoftInputMode
),这些值将作为推荐列表出现。您也可以向他们咨询。


10
投票

在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_width="match_parent"
         android:layout_height="match_parent"
         android:paddingBottom="16dp"
         android:paddingLeft="16dp"
         android:paddingRight="16dp"
         android:paddingTop="16dp"
         android:fitsSystemWindows="true">

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true"
        android:isScrollContainer="false">

   // add edittext here...

 </ScrollView>
 </RelativeLayout>

3
投票

使用以下代码:

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

我的代码中的网址是:

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);

2
投票

我通过在 View 周围添加 ScrollView 并在其中添加 EditText 来解决这个问题。

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        // Other views
        <EditText ... />
</ScrollView>

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


0
投票

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

android:windowSoftInputMode =“stateHidden | adjustmentPan”

示例:-

<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">

0
投票

将此行添加到您的活动的清单文件中,看看神奇的效果。

android:windowSoftInputMode="stateAlwaysHidden|调整调整大小"


0
投票

试试这个,也许会对你有帮助。

将以下行添加到您的 EditText

android:paddingVertical="16dp"

0
投票

对于使用 adjustPanFullscreen 的用户,答案如下。

// Set the OnApplyWindowInsetsListener to handle window insets changes

    ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, insets ->

        // Check if the bottom inset (keyboard) is non-zero and adjust the layout accordingly

        if (insets.isVisible(WindowInsetsCompat.Type.ime())) {
// Keyboard height if you need

    //          val keyboardHeight = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom
                val windowRect = Rect()
                view.getWindowVisibleDisplayFrame(windowRect)

        val editTextRect = Rect()
        mEditText.getGlobalVisibleRect(editTextRect)

        // Calculate the difference between the bottom of the editText and the windowRect
        val diff = editTextRect.bottom - windowRect.bottom

        if (diff > 0) {
            view.scrollBy(0, diff.plus(SET_YOUR_DESIRE_MARGIN_HERE))
        }
    } else {
        view.scrollTo(0, 0)
    }

    // Return the insets to keep the system default behavior
    insets
}

对于 API 级别 29 及以下,您必须在 Activity 或 Fragment 中设置 SOFT_INPUT_ADJUST_RESIZE。您可以根据需要在生命周期事件回调中重置它。像下面的 Fragment 一样,在 onAttach ->

中设置它
override fun onAttach(context: Context) {
        super.onAttach(context)
        if(Build.VERSION.SDK_INT<Build.VERSION_CODES.R)
            requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
    }

并在 onDetach 中重置它。

override fun onDetach() {
        if(Build.VERSION.SDK_INT<Build.VERSION_CODES.R)
            requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
        super.onDetach()
    }

希望这对未来的用户有所帮助。


0
投票

好吧,伙计们,我花了大约一个小时来完善这个东西并找到了解决方案:

注意事项:

  1. 使用相对布局制作聊天活动。
  2. android:windowSoftInputMode="adjustResize
    (在清单中)
  3. 在相对布局中添加此行
    android:fitsSystemWindows="true"

我已经在三个不同的项目上对此进行了测试,它有效..
[可选] 如果窗口填充导致任何问题,请使用 ActionBar 主题制作该特定活动

android:theme="@style/Theme.Konnect"
(在活动内的清单中)


-1
投票

我的解决方案很简单,将其添加到父布局中: android:fitsSystemWindows="true"

© www.soinside.com 2019 - 2024. All rights reserved.