4

我正在尝试将 AlertDialog 的正、负和中性按钮设置为可绘制对象而不是文本。

到目前为止,我已经成功地使用了这个:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
.setPositiveButton("Save", new DialogInterface.OnClickListener() {...})
.setNeutralButton("Trash", new DialogInterface.OnClickListener() {...})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {...});

AlertDialog alert = builder.create();
alert.show();

Button button0 = alert.getButton(AlertDialog.BUTTON_POSITIVE);
button0.setCompoundDrawablesWithIntrinsicBounds(this.getResources().getDrawable(R.drawable.ic_menu_save), null, null, null);
button0.setText("");

Button button1 = alert.getButton(AlertDialog.BUTTON_NEUTRAL);
button1.setCompoundDrawablesWithIntrinsicBounds(this.getResources().getDrawable(R.drawable.ic_menu_delete), null, null, null);
button1.setText("");

Button button2 = alert.getButton(AlertDialog.BUTTON_NEGATIVE);
button2.setCompoundDrawablesWithIntrinsicBounds(this.getResources().getDrawable(R.drawable.ic_menu_close_clear_cancel), null, null, null);
button2.setText("");

这是一种解决方法,因为我实际上只是在事后擦除文本。我的问题是,如果不设置某种文本,您似乎无法实例化按钮。

从一开始设置“[blank_space]”会产生相同的结果,图像被推到左边。在同一位置设置 null 或 "" 将绘制没有按钮的 AlertDialog。您可以在这里看到它如何在图片中向左推:

图片

无论如何只能使用图片吗?这比在我的简单情况下尝试处理翻译要好得多。

4

5 回答 5

1

从android文档,

setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom)
Sets the Drawables (if any) to appear to the left of, above, to the right of, and below the text.

由于您将图像放在左侧,因此图像将显示在按钮的左侧。您可以尝试将其放在顶部/底部。

另一种方法是使用 3 个 ImageButtons 创建自定义布局,并将其设置为警报

builder.setView(customLayout);
于 2012-07-09T07:25:49.153 回答
1

不推荐使用 AlertDialog。考虑改用 DialogFragments。您将拥有更多的控制和重用能力。是一个很好的谷歌博客,演示了如何使用和自定义它。

于 2012-07-09T07:23:34.240 回答
1

试试这个代码:

            LayoutInflater inflater=LayoutInflater.from(YourActivityName.this);
            View view=inflater.inflate(R.layout.buttton, null);
            AlertDialog.Builder builder=new AlertDialog.Builder(YourActivityName.this);
            builder.setView(view);
            builder.setTitle("Are you sure you want to exit?");
            Button posButton=(Button) view.findViewById(R.id.pos);
            Button neuButton=(Button) view.findViewById(R.id.neu);
            Button negButton=(Button) view.findViewById(R.id.neg);
            builder.create();
            builder.show();

膨胀按钮 xml 文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <Button 
        android:id="@+id/pos"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:background="@drawable/ic_launcher"/>
     <Button 
        android:id="@+id/neu"
         android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:background="@drawable/ic_launcher"/>
      <Button 
        android:id="@+id/neg"
         android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:background="@drawable/ic_launcher"/>


</LinearLayout>

最后,您可以为个人提供点击事件。希望这会对您有所帮助。

于 2012-07-09T07:35:14.467 回答
1

您只需创建自己的自定义对话框!您可以ImageButton在布局中指定您的,然后使用该布局创建一个对话框,您无需靠近正面、负面和中性按钮。您可以在这里找到一个很好的教程,只需在自定义布局中使用 ImageButton 而不是 Buttons。

于 2012-07-09T07:22:19.590 回答
0
   CustomDialog dialog = new Dialog(MyActivity.this);
                    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

                                        dialog.setContentView(R.layout.login);

                    final EditText editTextEmailAddress = (EditText) dialog
                            .findViewById(R.id.editTextEmailAddress);
                    final EditText editTextPassword = (EditText) dialog
                            .findViewById(R.id.editTextPassword);

                    TextView txtViewForgetPswd = (TextView) dialog
                            .findViewById(R.id.txtViewForgetPswd);

                    txtViewForgetPswd.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View arg0) {
                            // TODO Auto-generated method stub
                            // RETRIVE PASSWORD
                            dialog.dismiss();
                        }
                    });

                    ImageButton imgBtnSubmit = (ImageButton) dialog
                            .findViewById(R.id.imgBtnSubmit);
                    imgBtnSubmit.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View arg0) {
                            // CALL WEBSERVICE OR ASYNTASK TO LOG IN USER
                            String userName = editTextEmailAddress.getText()
                                    .toString();
                            String password = editTextPassword.getText().toString();

                            if (userName.equals("") && password.equals("")) {
                                Toast.makeText(BibleActivity.this,
                                        "Username or password cannot be empty.",
                                        Toast.LENGTH_SHORT).show();
                            } else {
                                                            }

                        }
                    });

                    ImageButton imgBtnCancel = (ImageButton) dialog
                            .findViewById(R.id.imgBtnCancel);
                    imgBtnCancel.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View arg0) {
                            // CLOSE DIALOG HERE FROM CROSS BUTTON
                            dialog.dismiss();
                        }
                    });

                    ImageButton btnCancelCross = (ImageButton) dialog
                            .findViewById(R.id.btnCancelCross);
                    btnCancelCross.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View arg0) {
                            // CLOSE DIALOG HERE FROM CROSS BUTTON
                            dialog.dismiss();
                        }
                    });
                    dialog.show();

////XML LAYOUT“登录”///

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="480dp"
    android:background="@drawable/mbc_login" >

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="45dp"
        android:layout_alignParentTop="true" >

        <ImageButton
            android:id="@+id/btnCancelCross"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right|center_vertical"
            android:layout_marginRight="20dp"
            android:background="@drawable/cross" >
        </ImageButton>
    </FrameLayout>

    <TextView
        android:id="@+id/txtViewEmailLbl"
        android:layout_width="200dp"
        android:layout_height="20dp"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="Email address"
        android:textColor="#000000" >
    </TextView>

    <EditText
        android:id="@+id/editTextEmailAddress"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:layout_below="@+id/txtViewEmailLbl"
        android:layout_centerHorizontal="true"
        android:hint="example@eg.com"
        android:imeOptions="actionNext" >
    </EditText>

    <TextView
        android:id="@+id/txtViewPswdLbl"
        android:layout_width="200dp"
        android:layout_height="20dp"
        android:layout_below="@+id/editTextEmailAddress"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:text="Password"
        android:textColor="#000000" >
    </TextView>

    <EditText
        android:id="@+id/editTextPassword"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:layout_below="@+id/txtViewPswdLbl"
        android:layout_centerHorizontal="true"
        android:hint="password123"
        android:imeOptions="actionNext"
        android:inputType="textPassword" >
    </EditText>

    <TableRow
        android:id="@+id/tblRowSubmit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editTextPassword"
        android:layout_centerHorizontal="true"
        android:layout_margin="10dp" >

        <ImageButton
            android:id="@+id/imgBtnSubmit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="5dp"
            android:background="@drawable/btn_submit" >
        </ImageButton>

        <ImageButton
            android:id="@+id/imgBtnCancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/btn_cancel" >
        </ImageButton>
    </TableRow>

    <TextView
        android:id="@+id/txtViewForgetPswd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tblRowSubmit"
        android:layout_centerHorizontal="true"
        android:layout_margin="5dp"
        android:text=" Forget Password ? "
        android:textColor="#306EFF"
        android:textStyle="italic" >
    </TextView>
</RelativeLayout>

于 2012-07-09T07:41:46.453 回答