打开键盘会破坏布局

Opening keyboard destroys the layout

我的布局有问题。在我的布局中,我有一个 EditText、一个 DatePicker、一个 TimePicker 和一个 Button。单击 EditText 会打开导致图片中显示的问题的键盘。来自 "android:windowSoftInputMode" 的不同方法没有改变任何东西。现在我不知道如何解决这个问题。

在输入文本之前隐藏其他组件是个好主意吗?这里的预期行为是什么?

<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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="patrickengelkes.com.alleneune.activities.CreateEventActivity">


<EditText
    android:id="@+id/event_name_edit_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

<DatePicker
    android:id="@+id/event_date_picker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/event_name_edit_text"
    android:layout_centerHorizontal="true" />

<Button
    android:id="@+id/send_event_invites"
    android:text="@string/send_event_invites_to_members"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

<TimePicker
    android:id="@+id/event_time_picker"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/send_event_invites"
    android:layout_alignLeft="@+id/event_time_picker"
    android:layout_alignStart="@+id/event_time_picker" />

提前致谢!

我认为是以下问题:

您是在告诉您的 DatePicker 它应该低于固定在顶部的 EditText

那么你是在告诉你的 TimerPicker 高于固定在底部的 Button

现在,当您打开 SoftInput 时,按钮会向上移动,您的 TimePicker 也会向上移动。但是 EditText 固定在顶部,您的 DatePicker.

也是如此

TimePickerDatePicker 都得到了 wrap_content 所以 TimePicker 唯一的出路就是进入 DatePicker!这就是它的样子!

我会试着告诉 TimePicker 我应该保持在 DatePicker:

以下
android:below=="@id/event_date_picker"

看看会发生什么!因为在那种情况下,它被迫保持在 DatePicker 以下并且不再像层一样漂浮到 DatePicker 中!我没试过,也许你需要正确声明 android:windowSoftInputMode。因为我不确定它现在是如何声明的! 希望对您有所帮助!