android – 在平板电脑上不提取EditText

我有一个带有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 – 在平板电脑上不提取EditText》

这就是我在平板电脑上得到的:

《android – 在平板电脑上不提取EditText》

最佳答案 经过一些研究和挖掘Android源代码后,我发现提取文本编辑是一种输入法(键盘)的责任.无法强制键盘提取视图.

我的HTC设备默认设置了HTC键盘,除非设置了IME_FLAG_NO_EXTRACT_UI,否则它会提取文本编辑.我的客户有三星平板电脑,默认配置三星键盘,不提取三星平板电脑上的文字编辑.默认情况下,仿真器具有Google键盘设置,并且只要感觉它就会提取文本编辑(在5“模拟器上提取,不在5”设备上提取).

其中一个解决方案是找到或实现键盘替换,它以横向模式提取文本编辑,然后建议用户安装它.这是一个糟糕的解决方案,因为没有人会这样做.

所以我最终确保我的UI不依赖于提取的文本编辑.在我的情况下,我的表单包含一个可滚动元素内的文本框.默认情况下,当文本框聚焦时,android会在两个选项之间做出决定:

>平移视图并将文本框移动到可见位置.此行为称为adjustPan
>减少视图的可用高度,从而缩小所有内容.此行为称为adjustResize.

如果您没有搞乱选项,那么如果视图中至少存在一个可滚动元素,则Android会选择第二个选项.否则它会平移视图.您可以通过使用adjustPan或adjustResize值将android:windowSoftInputMode属性分配给清单中的活动来影响此决策.

最后,我选择了adjustPan行为并稍微重新排列了视图中的元素,以确保平移视图有意义并且看起来并不奇怪.

点赞