0

Alertdialog を作成し、プログラムで画像付きの 3 つのトグルボタンを追加しようとしています。

1つのトグルボタンから始めてみましたが、何らかの理由でアラートダイアログが非常に小さく(画像のすぐ周り)、ボタン自体が奇妙に見えます(画像はボタンよりも大きくなります)。

これが私のコードです。何か問題がありますか?

LinearLayout ll = new LinearLayout(mActivity);
    ll.setOrientation(LinearLayout.VERTICAL);
    ll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    ToggleButton tb;
    for(int i=0;i<cards.size();i++){
        Card card = cards.get(i);
        tb = new ToggleButton(mActivity);
        tb.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        tb.setButtonDrawable(card.getDrawable(mActivity));
        ll.addView(tb);
    }


    AlertDialog.Builder builder;
    AlertDialog alertDialog;
    builder = new AlertDialog.Builder(mActivity);
    builder.setView(ll);
    alertDialog = builder.create();
    alertDialog.show();
4

1 に答える 1

1

Dialog または AlertDialog を使用すると、FILL_PARENT をルート レイアウトに設定しても、ダイアログが画面いっぱいにならないことがあることがわかりました。実際には WRAP_CONTENT のように動作します。

そのため、ほとんどの場合、固定のダイアログ幅を設定することになりました。

ルートの linearlayout を固定幅に設定してみてください。

ll.setLayoutParams(new LayoutParams(280 * scalingFactor, LayoutParams.FILL_PARENT));

scalingFactor は画面密度です (mdpi の場合は 1、hdpi の場合は 1.5 など)。

ただし、アラート ダイアログには XML レイアウトを使用することをお勧めします。コードで行うよりも、デザイナでどのように見えるかを確認する方が簡単です。たとえば、このレイアウト ファイルを my_toggle_button.xml とします。

<LinearLayout android:layout_width="280dp" android:layout_height="wrap_content"
    android:orientation="vertical">
   <ToggleButton android:background="@drawable/customToggleButton" />
   <ToggleButton android:background="@drawable/customToggleButton" />
   <ToggleButton android:background="@drawable/customToggleButton" />
</LinearLayout>

次に、customToggleButton.xml ドローアブルで ToggleButton をどのように表示するかを定義します。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_checked="false" android:drawable="@drawable/toggleButtonUnchecked" />
   <item android:state_checked="true" android:drawable="@drawable/toggleButtonChecked" />
</selector>

toggleButtonUnchecked.png と toggleButtonChecked.png の 2 つの PNG を指定する必要があります。

コードでは、コントロールを作成する代わりに、R.layout.my_toggle_button をビューにインフレートし、その上で AlertDialog の setView を呼び出します。

于 2012-07-16T04:45:38.490 に答える