1

我正在膨胀一个 AlertDialog 让用户发送评论。相当简单。但我收到了这个 Lint 警告:

布局对 API >= 14 使用了错误的按钮顺序:创建一个 layout-v14/chat_comment_dialog.xml 文件,顺序相反:取消按钮应该在左边(是“@string/send | Cancel”,应该是“Cancel | @字符串/发送“)

所以,是的,这就是解决方案,为 API >= 14 创建一个特定的布局并颠倒顺序。但是....真的吗?这真的是官方建议吗?在某些设备中设置一个订单,在其他设备中设置不同的订单?作为用户,我会感到非常困惑。我是否应该忽略这个 Lint 建议,或者以其他方式,为一组设备遵循这个新模式(我认为这很令人困惑)

无论如何,这是布局:

<?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 中膨胀按钮(也许这样按钮会自动排序),因为您设置为 Builder 的默认按钮的任何 onClickListener 都会关闭对话框,我必须避免这种行为才能自己控制对话框。

4

2 回答 2

6

如果您计划以 API 级别 >14 为目标,那么您绝对应该遵循设计规范。对对话框的布局进行了更改以提高可用性。

作为用户,您不会感到困惑,因为您只在单个 API 级别使用单个设备。令人困惑的,当开发人员创建非标准 UI 时。不遵守标准会导致沮丧和困惑。例如,如果用户手机上的所有其他应用程序(API 级别 >14)创建具有正确按钮顺序的标准对话框,而您的应用程序的按钮顺序错误,则会导致用户点击取消而不是发送,反之亦然。当然,这会使用户感到困惑和烦恼。

检查设备上的 API 级别并提供适当的布局实际上并没有太多额外的工作。如果您的应用程序设计得很好,那么它只需要几行代码。

于 2012-07-19T16:47:49.397 回答
-1

关于您的最后一条评论,您仍然可以从代码中执行所有 AlertDialog 内容,并且能够控制诸如何时关闭对话框之类的事情,只需使用 aView.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() {...});

添加备用侦听器可防止在按下按钮时自动关闭对话框。

于 2012-12-31T00:49:28.833 回答