Диалог меньше в SDK 23, чем в SDK 22

У меня есть приложение, которое использует две кнопки и средство выбора номера. Все работает нормально при запуске эмулятора с SDK 22, но при запуске SDK 23 диалоговое окно значительно меньше и не включает крайнюю левую кнопку. Вот XML для диалога:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="match_parent"
android:layout_height="match_parent">
<NumberPicker
    android:id="@+id/numberPicker1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="64dp" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/numberPicker1"
    android:layout_marginLeft="20dp"
    android:layout_marginTop="98dp"
    android:layout_toRightOf="@+id/numberPicker1"
    android:text="Cancel" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button2"
    android:layout_alignBottom="@+id/button2"
    android:layout_marginRight="16dp"
    android:layout_toLeftOf="@+id/numberPicker1"
    android:text="Set" />
</RelativeLayout>

Вот код, который я использую для инициализации диалога:

final Dialog d = new Dialog(MainActivity.this);
d.setTitle("Delay");
d.setContentView(R.layout.dialog);

Button b1 = (Button) d.findViewById(R.id.button1);
Button b2 = (Button) d.findViewById(R.id.button2);

final NumberPicker np = (NumberPicker) d.findViewById(R.id.numberPicker1);
np.setMaxValue(100);
np.setMinValue(0);
np.setWrapSelectorWheel(false);

b1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        changeDelay(np.getValue(), user);
        d.dismiss();
    }
});

b2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        d.dismiss();
    }
});

d.show();

1 ответ

Попробуйте макет ниже:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <NumberPicker
        android:id="@+id/numberPicker1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="64dp"
        android:layout_marginBottom="98dp"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/numberPicker1"
        android:layout_alignParentRight="true"
        android:text="Cancel" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/numberPicker1"
        android:layout_alignParentLeft="true"
        android:text="Set" />
</RelativeLayout>

Некоторые проблемы:

android: layout_alignBottom заставит RelativeLayout расширяться до нижней части экрана. Это не хорошо для диалога. Вы можете найти детали здесь

Вы определили огромные поля. Ваш диалог в ландшафтном режиме не отображается должным образом... Некоторое содержимое становится скрытым.

Но я не уверен, почему он работал нормально на API 22, а не на API 23

Другие вопросы по тегам