使用drawables而不是AlertDialog按钮的文本

时间:2012-07-09 07:15:25

标签: android

我正在尝试将AlertDialog的Positive,Negative和Neutral按钮设置为drawable而不是text。

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

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。您可以在此处看到它如何向左侧推动:

picture

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

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

不推荐使用AlertDialog。请考虑使用DialogFragments。您将拥有更多的控制和重用能力。 Here是一个很好的Google博客,演示了如何使用它并对其进行自定义。

答案 2 :(得分: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);

答案 3 :(得分: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();

膨胀buttton 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>

最后,您可以向个人发送点击事件。希望这对您有帮助。

答案 4 :(得分: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“login”///

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