平板电脑

时间:2016-03-31 15:10:46

标签: android android-layout 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);
    }
}

还有一些照片,只是因为。这就是在手机上正确呈现布局的方式(模拟和物理):

correct

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

incorrect

1 个答案:

答案 0 :(得分:2)

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

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

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

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

  1. 平移视图并将文本框移动到可见位置。此行为称为adjustPan
  2. 减少视图的可用高度,从而缩小所有内容。此行为称为adjustResize
  3. 如果您没有搞乱选项,那么如果视图中至少存在一个可滚动元素,则Android会选择第二个选项。否则它会平移视图。您可以通过为android:windowSoftInputModeadjustPan值的清单中的活动分配adjustResize属性来影响此决策。

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