以编程方式使用切换按钮创建警报对话框

时间:2012-07-15 22:37:27

标签: android android-layout

我正在尝试创建Alertdialog,并以编程方式向其添加3个togglebuttons图像。

我尝试从一个togglebutton开始,由于某种原因警报对话框非常小(仅在图像周围),按钮本身看起来很奇怪(图像大于按钮)..

这是我的代码,发现有什么问题吗?

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();

1 个答案:

答案 0 :(得分:1)

我发现有时使用Dialog或AlertDialog,即使您将FILL_PARENT设置为根布局,对话框也不会填满屏幕。它的行为实际上就像WRAP_CONTENT。

所以我最终在大部分时间都设置了固定的对话框宽度。

尝试将root linearlayout设置为固定宽度:

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

其中scalingFactor是屏幕密度(1表示mdpi,1.5表示hdpi等)。

但是,我建议在警报对话框中使用XML布局。更容易看到Designer中的样子而不是代码中的样子。例如让我们调用这个布局文件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>

然后定义ToggleButton在customToggleButton.xml drawable中的显示方式

<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>

您需要提供两个PNG toggleButtonUnchecked.png和toggleButtonChecked.png。

在你的代码中,不是构建控件,只需将R.layout.my_toggle_button膨胀到视图中并在其上调用AlertDialog的setView。