当我尝试在屏幕底部的 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之前和之后的图像。
在清单中的特定活动标签上添加此行:
android:windowSoftInputMode="adjustPan"
为此,您必须在活动清单中声明
<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>
这里是简单的解决方案针对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
),这些值将作为推荐列表出现。您也可以向他们咨询。
在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>
使用以下代码:
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);
我通过在 View 周围添加 ScrollView 并在其中添加 EditText 来解决这个问题。
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
>
// Other views
<EditText ... />
</ScrollView>
向 Android Manifest 添加标签对我没有帮助。
将此行放入您的应用程序标签中:-
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">
将此行添加到您的活动的清单文件中,看看神奇的效果。
android:windowSoftInputMode="stateAlwaysHidden|调整调整大小"
试试这个,也许会对你有帮助。
将以下行添加到您的 EditText
android:paddingVertical="16dp"
对于使用 adjustPan 和 Fullscreen 的用户,答案如下。
// 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()
}
希望这对未来的用户有所帮助。
好吧,伙计们,我花了大约一个小时来完善这个东西并找到了解决方案:
注意事项:
android:windowSoftInputMode="adjustResize
(在清单中)android:fitsSystemWindows="true"
我已经在三个不同的项目上对此进行了测试,它有效..
[可选] 如果窗口填充导致任何问题,请使用 ActionBar 主题制作该特定活动
android:theme="@style/Theme.Konnect"
(在活动内的清单中)
我的解决方案很简单,将其添加到父布局中: android:fitsSystemWindows="true"