我在RelativeView中有一些元素设置了对齐底部属性,当软键盘出现时,软键盘隐藏了元素。
我希望它们向上移动,以便如果有足够的屏幕空间,它们会显示在键盘上方,或者使键盘上方的部分可滚动,这样用户仍然可以看到元素。
有关如何处理此事的任何想法?
答案 0 :(得分:91)
是的,请查看this article on the Android developers' site,其中介绍了框架如何处理出现的软键盘。
android:windowSoftInputMode
属性可用于指定基于每个活动的内容:布局是否已调整大小或是否滚动等。
答案 1 :(得分:73)
您也可以在onCreate()
方法中使用此代码:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
答案 2 :(得分:30)
为您的活动添加AndroidManifest.xml:
android:windowSoftInputMode="adjustPan|adjustResize"
答案 3 :(得分:21)
更改您的清单文件的活动,如
windowSoftInputMode="adjustResize"
或强>
在活动类中对onCreate()
方法进行更改,例如
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
答案 4 :(得分:15)
我面临的类似问题我的布局包括里面的滚动视图。 每当我尝试在EditText中选择文本时,复制/剪切/粘贴操作栏都会向上移动,代码如下,因此不会调整布局大小
android:windowSoftInputMode="adjustPan"
将其修改为如下
1)AndroidManifest.xml
android:windowSoftInputMode="stateVisible|adjustResize"
2)style.xml文件,活动样式
<item name="android:windowActionBarOverlay">true</item>
它奏效了。!!!!!!!!!!!!
答案 5 :(得分:12)
在AndroidManifest.xml中,不要忘记设置:
android:windowSoftInputMode="adjustResize"
并且对于ScrollView中的RelativeLayout,设置:
android:layout_gravity="center" or android:layout_gravity="bottom"
没关系
答案 6 :(得分:7)
用于活动在其下面的oncreate methode插入
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
和onCreate方法中的片段
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
答案 7 :(得分:6)
滚动屏幕有三个步骤。
机器人:windowSoftInputMode = “adjustResize”
getWindow()setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:background="@drawable/bg" android:layout_height="match_parent" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_gravity="center" > <TextView /> ......... <TextView /> <EditText > <requestFocus /> </EditText> <Button /> </RelativeLayout> </ScrollView>
P.S。不要忘记在父相对布局中添加android:layout_gravity =“center”。
答案 8 :(得分:5)
我尝试了迭戈拉米雷斯的方法,它有效。 在AndroidManifest中:
<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
...
</activity>
在activity_main.xml中:
<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>
答案 9 :(得分:4)
我找到了解决问题的方法,它与你的问题非常相似。
首先,我只有一个包含2个元素的LinearLayout,一个ImageView和一个包含2个EditText和一个Button的LinearLayout,所以我需要在没有键盘的情况下将它们分开全屏,当键盘出现时它们应该看起来近。
所以我添加了它们之间的视图,其高度属性为0dp,权重为1,这让我可以将视图彼此分开。当键盘出现时,由于他们没有固定高度,他们只需调整大小并保持方位。
瞧!当键盘存在或不存在时,布局调整大小并且我的视图之间的距离相同。
答案 10 :(得分:1)
如果你是片段,那么你必须将以下代码添加到你的onCreate上,它解决了我的问题
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
答案 11 :(得分:1)
在清单文件中添加以下行。会起作用
<activity name="MainActivity"
android:windowSoftInputMode="stateVisible|adjustResize">
...
</activity>
答案 12 :(得分:1)
这是完整的清单代码
<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>
答案 13 :(得分:0)
好的,这已经很晚了,但是我发现,如果您在编辑文本下添加一个列表视图,那么键盘将在不移动ListView的情况下将所有布局移动到该编辑文本下
<EditText
android:id="@+id/et"
android:layout_height="match_parent"
android:layout_width="match_parent"
/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"//can make as 1dp
android:layout_below="@+id/et" // set to below editext
android:id="@+id/view"
>
**<any layout**
这是唯一对我有用的解决方案。
答案 14 :(得分:0)
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
app:elevation="0dp">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
答案 15 :(得分:0)
我只是将以下行添加到顶层布局,并且一切正常:
android:fitsSystemWindows="true"
答案 16 :(得分:0)
If user want this task using manifest then add this line in manifest
In manifest add this line: - android:windowSoftInputMode="adjustPan"
e.g.
<activity
android:name=".ui.home.HomeActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan">
</activity>
In Java File or Kotlin File(Programically) : - If user want this using Activity then add below line in onCreate Method
activity!!.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
答案 17 :(得分:0)
<activity name="ActivityName"
android:windowSoftInputMode="adjustResize">
...
</activity>
在要滚动的布局周围添加NestedScrollView,这将完美地工作
答案 18 :(得分:0)
没有一个建议可以解决我的问题。 调整平移几乎就像工作调整大小一样。如果我设置什么都不调整,则布局不会上移,但会隐藏我正在适当书写的底部编辑文本。因此,经过24小时的连续搜索,我发现{{3}}可以解决我的问题。
答案 19 :(得分:0)
可能已经晚了,但我想补充一点。
在Android Studio版本4.0.1和Gradle版本6.1.1中,如果您在Activity中添加以下标志,则windowSoftInputMode
将无法正常工作:
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
);
在浪费大量时间后,我发现了该漏洞。为了使adjustResize
或AdjustPan
或windowSoftInputMode
的任何属性正常工作,您需要将其从活动中删除。
答案 20 :(得分:0)
使用滚动视图作为父级,并在滚动视图中使用此标记
android:fillViewport =“ true”
答案 21 :(得分:0)
在看了很多解决方案后,这对我有用:
AndroidManifest.xml
Add
android:windowSoftInputMode="stateHidden|adjustPan"
to an activity declaration in manifest:
<activity
android:name=".MainActivity"
android:screenOrientation="landscape"
android:windowSoftInputMode="stateHidden|adjustPan">
</activity>