我有一个带有EditText的布局,如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
.....
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/some_button">
<EditText
android:id="@+id/some_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:hint="@string/some_text_hint"/>
.....
</RelativeLayout>
</RelativeLayout>
在横向模式下,此布局行为不一致.当在手机上显示时,some_text将在焦点时被提取为全屏,这很好.但是,使用这种精确的布局,如果在平板电脑上显示,则不会提取some_text.我希望文本框也可以在平板电脑上全屏显示.
我正在测试Nexus 5手机和Nexus 7平板电脑模拟器预设,两者都运行Android 4.2.2(API 17).
UPD:
此问题与使用Android 5.1的Samsung Galaxy Tab E设备和运行Android 5.1的模拟器上的任何edittext一起重现.
UPD2:
我创建了一个测试empty project只是为了验证它确实是一个香草文本框问题.它是.现在我的布局看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.myapplication.MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="This should be fullscreen"/>
</RelativeLayout>
这是一个活动代码,以防万一:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
还有一些照片,只是因为.这就是在手机上正确呈现布局的方式(模拟和物理):
这就是我在平板电脑上得到的:
最佳答案 经过一些研究和挖掘Android源代码后,我发现提取文本编辑是一种输入法(键盘)的责任.无法强制键盘提取视图.
我的HTC设备默认设置了HTC键盘,除非设置了IME_FLAG_NO_EXTRACT_UI,否则它会提取文本编辑.我的客户有三星平板电脑,默认配置三星键盘,不提取三星平板电脑上的文字编辑.默认情况下,仿真器具有Google键盘设置,并且只要感觉它就会提取文本编辑(在5“模拟器上提取,不在5”设备上提取).
其中一个解决方案是找到或实现键盘替换,它以横向模式提取文本编辑,然后建议用户安装它.这是一个糟糕的解决方案,因为没有人会这样做.
所以我最终确保我的UI不依赖于提取的文本编辑.在我的情况下,我的表单包含一个可滚动元素内的文本框.默认情况下,当文本框聚焦时,android会在两个选项之间做出决定:
>平移视图并将文本框移动到可见位置.此行为称为adjustPan
>减少视图的可用高度,从而缩小所有内容.此行为称为adjustResize.
如果您没有搞乱选项,那么如果视图中至少存在一个可滚动元素,则Android会选择第二个选项.否则它会平移视图.您可以通过使用adjustPan或adjustResize值将android:windowSoftInputMode属性分配给清单中的活动来影响此决策.
最后,我选择了adjustPan行为并稍微重新排列了视图中的元素,以确保平移视图有意义并且看起来并不奇怪.