Я раздуваю 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, будет отбрасывать диалог, а я должны избегать этого поведения, чтобы самостоятельно управлять Диалогом.
Если вы планируете настраивать уровень API> 14, то вам следует обязательно следовать спецификации дизайна. Были внесены изменения в компоновку диалогов для повышения удобства использования.
В качестве пользователя вы не будете путать, потому что используете только одно устройство на одном уровне API. Смущает, когда разработчик создавать нестандартные UI - х. Не следовать стандарту приведет к разочарованию и путанице. Например, если все другие приложения на пользовательском телефоне (уровень API> 14) создают стандартные диалоги с правильным порядком кнопок, а в вашем приложении неправильный порядок кнопок приводит к тому, что пользователи нажимают "Отмена" вместо "Отправить" и "наоборот". Несомненно, это смутит и раздражает пользователя.
На самом деле не так много дополнительной работы, чтобы проверить уровень API на устройстве и предоставить соответствующий макет. Если вы хорошо разработали приложение, оно не должно требовать больше нескольких строк кода.
Что касается вашего последнего комментария, вы все равно можете сделать все данные 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() {...});
Добавление альтернативного прослушивателя предотвращает автоматическое отключение диалога при нажатии кнопки.