Порядок кнопок в диалоге

1

Я раздуваю AlertDialog, чтобы пользователь мог отправлять комментарии. Довольно просто. Но я получаю предупреждение от Lint:

Макет использует неправильный порядок кнопок для API> = 14: создайте файл layout-v14/chat_comment_dialog.xml с обратным порядком: кнопка "Отмена" должна быть слева (была "@string/send | Cancel", должна быть "Cancel | @строка/отправить ")

Итак, да, это решение, создайте конкретный макет для API> = 14 и инвертируйте заказ. Но действительно? Это ДЕЙСТВИТЕЛЬНО официальное предложение? Чтобы установить один порядок на некоторых устройствах, а другой - в других? Как пользователь, я был бы очень смущен. Должен ли я игнорировать этот совет Линта или иначе, следуйте этому новому шаблону для набора устройств (который, я думаю, довольно запутанный)

Во всяком случае, здесь макет:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="8dp" >

    <EditText
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/username"
        android:singleLine="true" />

    <EditText
        android:id="@+id/message"
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:gravity="top|left"
        android:hint="@string/review" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:paddingRight="4dp"
            android:text="@string/send"
            android:textSize="18sp" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:paddingLeft="4dp"
            android:text="@android:string/cancel"
            android:textSize="18sp" />
    </LinearLayout>

</LinearLayout>

Кстати, мне нужно раздувать кнопки в XML, а не в AlertDialog.Builder (возможно, таким образом кнопки будут автоматически упорядочиваться), потому что любой из onClickListener, который вы установили в кнопку Deafult Builder, будет отбрасывать диалог, а я должны избегать этого поведения, чтобы самостоятельно управлять Диалогом.

  • 2
    Вы должны следовать совету, да. Вы можете неохотно следовать, хотя, но вы должны следовать. Конечно, вы можете иметь отдельный макет ok / cancel (2 версии) и <включить> его везде.
  • 0
    "Но .... ДЕЙСТВИТЕЛЬНО? Это ДЕЙСТВИТЕЛЬНО официальное предложение?" Да, это точно = / Они изменили порядок кнопок по умолчанию в диалогах на этом уровне API. Если вы создадите диалог с компоновщиком, а не через XML-макет, вы также увидите это изменение. Была ли это хорошая идея, безусловно, подлежит обсуждению, но, тем не менее, они решили работать с ней.
Теги:
android-layout
alertdialog
android-widget

2 ответа

6
Лучший ответ

Если вы планируете настраивать уровень API> 14, то вам следует обязательно следовать спецификации дизайна. Были внесены изменения в компоновку диалогов для повышения удобства использования.

В качестве пользователя вы не будете путать, потому что используете только одно устройство на одном уровне API. Смущает, когда разработчик создавать нестандартные UI - х. Не следовать стандарту приведет к разочарованию и путанице. Например, если все другие приложения на пользовательском телефоне (уровень API> 14) создают стандартные диалоги с правильным порядком кнопок, а в вашем приложении неправильный порядок кнопок приводит к тому, что пользователи нажимают "Отмена" вместо "Отправить" и "наоборот". Несомненно, это смутит и раздражает пользователя.

На самом деле не так много дополнительной работы, чтобы проверить уровень API на устройстве и предоставить соответствующий макет. Если вы хорошо разработали приложение, оно не должно требовать больше нескольких строк кода.

  • 0
    Спасибо за ваш ответ. Это не лишняя работа, которая раздражает меня. На самом деле, я уже сделал это, так как вы правы насчет путаницы пользователей в одном устройстве. Но путаница все еще существует, если пользователь использует или использовал другие устройства Android. Во всяком случае, это просто еще один фрагмент фрагментации Android.
  • 1
    Невозможно узнать, какие устройства может иметь пользователь, и каждый пользователь, имеющий несколько устройств, наверняка не будет иметь один и тот же набор устройств. Вместо того, чтобы играть в угадайку, всегда лучше внедрять стандарты. Для пользователей очень легко контекстуализировать пользовательский интерфейс для конкретного устройства. Т.е. разница в интерфейсе между моими компьютерами Mac и Linux не усложняет использование одного из них. Вместо этого возникают проблемы, когда приложение Mac или Linux спроектировано как приложение для другой платформы.
Показать ещё 1 комментарий
-1

Что касается вашего последнего комментария, вы все равно можете сделать все данные AlertDialog из кода и иметь возможность контролировать такие вещи, как когда диалог отклоняется, просто используйте View.onClickListener вместо DialogInterface.onClickListener:

AlertDialog d = new AlertDialog.Builder(context)
        .setPositiveButton(R.string.button_text, null).show();

а затем добавить слушателя:

d.getButton(AlertDialog.BUTTON_POSITIVE)
        .setOnClickListener(new View.onClickListener() {...});

Добавление альтернативного прослушивателя предотвращает автоматическое отключение диалога при нажатии кнопки.

Сообщество Overcoder
Наверх
Меню