Android外观问题中的自定义AlertDialogs / Dialogs

时间:2015-04-02 05:46:54

标签: android customization alertdialog android-dialog

我已在Android中实现了以下对话,但遇到了一些问题,我无法弄清楚为什么会这样。

AlertDialog

  1. 我无法弄清楚为什么顶部和底部有一个白色空间。以及如何删除它!
  2. 由于我使用的是 Dialog 而非 AlertDialog ,因此当我触摸屏幕上的其他位置时,此消息会消失。我想阻止这种情况发生,并希望仅在用户选择这两个选项中的任何一个时才关闭消息框。
  3. 我尝试了多少,我无法获得相同宽度的取消和擦除按钮。
  4. 以下是XML

    custom_alert.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:background="@drawable/custom_alert_layout"
    android:id="@+id/alert_layout"
    android:paddingBottom="15dp"
    android:paddingTop="10dp"
    android:layout_height="wrap_content">
    <ImageView
     android:layout_width="40dp"
     android:layout_height="40dp"
     android:id="@+id/alert_icon_imageview"
     android:src="@drawable/alerticon"
     android:layout_alignParentTop="true"
     android:layout_alignLeft="@+id/alert_msg"
     android:layout_alignStart="@+id/alert_msg" />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/alert_title"
     android:text="TITLE"
    android:textSize="18sp"
    android:textStyle="bold"
    android:textColor="#0a4d4a"
     android:layout_alignParentTop="true"
     android:layout_toRightOf="@+id/alert_icon_imageview"
     android:layout_toEndOf="@+id/alert_icon_imageview"
     android:layout_marginLeft="20dp" />
    <ImageView
    android:layout_width="match_parent"
    android:layout_height="2dp"
     android:layout_marginTop="10dp"
     android:layout_marginRight="4dp"
     android:layout_marginLeft="2dp"
    android:id="@+id/alert_divider_imageview"
    android:layout_below="@+id/alert_title"
    android:src="@drawable/alertdivider"/>
    <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/alert_msg"
     android:text="MESSAGE"
     android:layout_marginTop="10dp"
     android:layout_marginLeft="10dp"
    android:textSize="16sp"
    android:layout_below="@+id/alert_divider_imageview"
    android:textColor="#ff373334"/>
    <ImageView
    android:layout_width="match_parent"
    android:layout_height="2dp"
     android:layout_marginRight="4dp"
     android:layout_marginLeft="2dp"
     android:layout_marginTop="10dp"
    android:id="@+id/alert_divider_imageview2"
    android:layout_below="@+id/alert_msg"
    android:src="@drawable/alertdivider"/>
    <Button
     android:layout_width="150dp"
    android:id="@+id/alert_cancel"
     android:layout_marginLeft="10dp"
     android:layout_marginRight="5dp"
     android:layout_marginTop="15dp"
     android:textColor="#ffffff"
     android:textStyle="bold"
    android:text="CANCEL"
     android:background="@drawable/custom_alert_cancel"
     android:layout_height="wrap_content"
     android:layout_below="@+id/alert_divider_imageview2"
      />
    <Button
    android:layout_width="150dp"
    android:id="@+id/alert_ok"
    android:text="ERASE"
     android:textStyle="bold"
     android:layout_marginRight="10dp"
     android:layout_marginLeft="5dp"
     android:layout_marginTop="15dp"
     android:textColor="#ffffff"
     android:background="@drawable/custom_alert_ok"
     android:layout_toRightOf="@+id/alert_cancel"
     android:layout_height="wrap_content"
    android:layout_below="@+id/alert_divider_imageview2" />
    </RelativeLayout>
    

    custom_alert_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false" >
        <shape android:shape="rectangle">
            <corners android:radius="10dp"/>
            <solid android:color="#139977" />
            <stroke android:width="2dp" android:color="#0a4d4a" />
        </shape>
    </item>
    </selector>
    

7 个答案:

答案 0 :(得分:1)

你可以发布你的活动代码吗?

在您的活动中尝试此操作:

    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.alert_dialog);

    Button okBtn = (Button) dialog.findViewById(R.id.ok_btn);
    Button cancelBtn = (Button) dialog.findViewById(R.id.cancel_btn);

    okBtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            doErase();  
        }
    });
    cancelBtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            dialog.dismiss();

        }
    });

    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    dialog.setCancelable(false);
    dialog.show();

答案 1 :(得分:0)

解决第3个问题,从xml中删除按钮并使用对话框的内置按钮。 setPositiveButton()类的setNegativeButton()dialog等方法。 它会给你相同大小的按钮。

答案 2 :(得分:0)

解决你可以在xml中使用的第一个问题,如

<item name="android:background">@android:color/transparent</item>

或在java

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

答案 3 :(得分:0)

只需在对话框中添加一行,即删除对话框的操作栏和标题栏:

Dialog dialog = new Dialog(MainActivity.this);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //add this line
        dialog.setContentView(R.layout.activity_main);

答案 4 :(得分:0)

解决您的第一个问题在setContentView

之前添加此代码
Window window = actDialog.getWindow();
    WindowManager.LayoutParams wlp = window.getAttributes();

    window.setAttributes(wlp);
    window.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

    actDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

你的第二个问题解决方案

actDialog.setCanceledOnTouchOutside(false);

你的第三个问题解决方案

将您的两个Button放入LinearLayout并提供layout_weight相同的

答案 5 :(得分:0)

1.删除顶部的空白区域:    将这两行添加到对话框中,

       dialog.getWindow();
       dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
       dialog.setContentView(R.layout.alert_dialog);

删除底部的空白区域,在您的代码中只删除以下行

 <corners android:radius="10dp"/> 
来自custom_alert_layout.xml文件的

2.要解决第二个问题:在代码中添加以下两行

  dialog.setCancelable(false);
  dialog.setCanceledOnTouchOutside(false);

3.为了获得相同的按钮宽度,使用LinearLayout作为两个按钮的父级,并为按钮赋予相同的权重。

答案 6 :(得分:0)

第3个问题 这是代码

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

 <Button
android:layout_width="match_parent"
android:id="@+id/alert_cancel"
android:layout_marginLeft="10dp"
android:layout_weight="1"
android:layout_marginRight="5dp"
android:layout_marginTop="15dp"
android:textColor="#ffffff"
android:textStyle="bold"
android:text="CANCEL"
android:background="@drawable/custom_alert_cancel"
android:layout_height="wrap_content"
/>
<Button
android:layout_width="match_parent"
android:id="@+id/alert_ok"
android:text="ERASE"
android:textStyle="bold"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="15dp"
android:textColor="#ffffff"
android:background="@drawable/custom_alert_ok"
android:layout_height="wrap_content"
/>
</LinearLayout>