自定义一个圆角AlertDialog


今天遇到一个圆角AlertDialog的需求,本身dialog自定义一个圆角并不复杂,但是遇上alertdialog就有一些坑了. 首先还是先自定义一个alertdialog
AlertDialog.Builder builder = new Builder(this, R.style.mydialog);
View view = View.inflate(this, R.layout.reply_alertdialog, null);
final AlertDialog alert = builder.create();
alert.show();
R.layout.reply_alertdialog布局是完全自定义的布局 省略的贴一部分
<?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="wrap_content"
    android:background="@null"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/linearlayout_meeting_attend"
        android:orientation="vertical">
        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginTop="20dp"
            android:orientation="vertical">
        </RadioGroup>
        <LinearLayout
            android:id="@+id/Button_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/corner_bottom"
            android:orientation="horizontal">
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
               />
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>
其中 linearlayout_meeting_attend 即圆角布局
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!-- 填充颜色 -->
    <solid android:color="@color/white"></solid>
    <!-- 线的宽度,颜色灰色 -->
    <stroke
        android:width="0dp"
        android:color="#D5D5D5"></stroke>
    <!-- 矩形的圆角半径 -->
    <corners android:radius="10dp" />
</shape>
为了去掉alertdialog带来的黑色底边 加入以下代码
WindowManager.LayoutParams lp = alert.getWindow().getAttributes();
lp.width = LayoutParams.WRAP_CONTENT;
lp.height = LayoutParams.WRAP_CONTENT;
alert.getWindow().setAttributes(lp);
alert.getWindow().setContentView(view);
alert.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
并且在开头的代码中,还涉及到一个自定义的style
<style name="mydialog" parent="@android:style/Theme.Dialog">
<!--<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>-->
<item name="android:windowNoTitle">true</item>
<!--<item name="android:background">@android:color/transparent</item>-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.6</item>-->
</style>
注释的部分保持注释即可 1.如何关闭这个alertdialog ? 使用 alert.dismiss() 顺便贴上开启的代码alert.show() 2.如果监听和修改控件? 通过view.findviewbyid获取到控件 然后直接设置点击事件或修改属性即可