1

ユーザーがコメントを送信できるように AlertDialog を膨らませています。かなり単純です。しかし、次の Lint 警告が表示されます。

レイアウトは、API >= 14 に対して間違ったボタン順序を使用します: 逆の順序で layout-v14/chat_comment_dialog.xml ファイルを作成します: キャンセル ボタンは左側にある必要があります (以前は「@string/send | キャンセル」でしたが、「キャンセル | @」にする必要があります)。文字列/送信")

ええ、これが解決策です。API >= 14 の特定のレイアウトを作成し、順序を逆にします。しかし....本当に?これは本当に公式の提案ですか?一部のデバイスで 1 つの順序を設定し、別のデバイスで別の順序を設定するには? ユーザーとして、私は非常に混乱していると思います。この 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>

ちなみに、Builder のデフォルト ボタンに設定した onClickListener はダイアログを無視するため、AlertDialog.Builder ではなく XML で Buttons をインフレートする必要があります (おそらく、この方法でボタンは自動的に並べ替えられます)。ダイアログを自分で制御するには、その動作を回避する必要があります。

4

2 に答える 2

6

API レベル 14 を超えるターゲットを計画している場合は、必ず設計仕様に従う必要があります。使いやすさを向上させるために、ダイアログのレイアウトが変更されました。

単一の API レベルで単一のデバイスのみを使用しているため、ユーザーとして混乱することはありません。紛らわしいのは、開発者が非標準の UI を作成する場合です。標準に従わないと、フラストレーションと混乱が生じます。たとえば、ユーザーの電話 (API レベル > 14) の他のすべてのアプリが適切なボタンの順序で標準ダイアログを作成し、アプリのボタンの順序が間違っている場合、ユーザーは [送信] ではなく [キャンセル] を押すことになり、その逆も同様です。確かにこれはユーザーを混乱させ、悩ませるでしょう。

デバイスの API レベルをチェックし、適切なレイアウトを提供することは、それほど余分な作業ではありません。アプリをうまく設計すれば、数行のコードしか必要としません。

于 2012-07-19T16:47:49.397 に答える
-1

最後のコメントに関しては、コードからすべての AlertDialog を行うことができ、ダイアログが閉じられたときなどを制御できます。View.onClickListener代わりにa を使用し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 に答える