我在一个RelativeLayout中有几个设置了align bottom属性的元素,当软键盘弹出时,这些元素被软键盘遮盖了。
我希望它们能够往上移,以便在屏幕空间足够的情况下显示在键盘上方,或者使键盘上方的区域可滚动,用户仍然可以看到这些元素。
有关于如何解决这个问题的任何想法吗?
我在一个RelativeLayout中有几个设置了align bottom属性的元素,当软键盘弹出时,这些元素被软键盘遮盖了。
我希望它们能够往上移,以便在屏幕空间足够的情况下显示在键盘上方,或者使键盘上方的区域可滚动,用户仍然可以看到这些元素。
有关于如何解决这个问题的任何想法吗?
我尝试了Diego Ramírez的一个方法,它有效。在AndroidManifest文件中:
<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
...
</activity>
<LinearLayout ...
android:orientation="vertical">
<Space
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" />
<EditText
android:id="@+id/edName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/first_name"
android:inputType="textPersonName" />
<EditText ...>
...
</LinearLayout>
android:fitsSystemWindows="true"
ConstraintLayout
将顶部部分固定在顶部,底部部分固定在底部的方式来实现更加优雅的效果。当键盘打开时,它会自然地通过挤压中间的空间来调整大小(如果您使用adjustResize
)。 - hmac在Java文件或Kotlin文件中(通过编程方式):- 如果用户想要在Activity中使用此功能,则在onCreate方法中添加以下行:
activity?.window()?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
以下是完整的清单代码
<activity
android:name=".activities.MainActivity"
android:windowSoftInputMode="adjustResize"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
<activity
...
android:windowSoftInputMode="adjustPan|adjustResize"
在您的清单文件中添加以下行。它会起作用。
<activity name="MainActivity"
android:windowSoftInputMode="stateVisible|adjustResize">
...
</activity>
view.requestFocus();