今天遇到一个圆角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获取到控件
然后直接设置点击事件或修改属性即可