今天在群里和一个群友讨论圆角的问题,他要实现一个对话框的形式,但是讨厌那个四四方方的边框,让我想想办法,我看来主要有两个办法可以解决 第一个呢 就是把dialog进行样式设置这个是真正的dialog。另一个呢 就是平常的activity只是使用一个dialog的主题,我这里选择了第二个第一种没有进行调试。
setContentView(R.layout.custom_dialog_activity);很简单吧
关键就是layout.custom_dialog_activity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical|center_horizontal" android:text="custom_dialog_activity_textdfdfdihfdihfdihdshshudufhuddudfidifsoidhis我爱你"/> <Button android:id="@+id/ibtn" android:layout_below="@+id/text" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/icon" /> </RelativeLayout>
这里呢我采用了RelativeLayout 如果采用linearLayout的话 textView文本太长竟然截断 我不知道如何解决 换成了relativelatout。这就是要显示的主界面。
但是关键的部分 在哪里呢 那就是主题在主xml中加入
<activity android:name=".CustomDialogActivity" android:label="@string/app_name" android:theme="@style/Theme.CustomDialog">
附件alert中listView最后一个按钮实现的是上面的功能
然后就是Theme.CustomDialog
也就是关键点了
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- <style name="Theme" parent="android:Theme"> </style> --> <style name="Theme.CustomDialog" parent="android:style/Theme.Dialog"> <item name="android:windowBackground">@drawable/filled_box</item> <item name="android:windowNoTitle">true</item> </style> </resources>
我们继承了父类的dialog的主题 我查看了一下 里面默认 <item name="android:windowFrame">@null</item>
也就是说主类中已经默认 不要边框了
这里呢就主要有drawable/filled_box 这个就很很简单了 直接从自带的文件中拿来的
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ffffffff"/> <stroke android:width="3dp" color="#ffff8080"/> <corners android:radius="30dp" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> </shape>
solid 也就是实体话 填充色的意思 就是整个背景的颜色
stroke 就是描边的意思 也就是边缘的颜色如果设置不仔细是没有效果的 有点要求这个
corners就是你喜欢的圆角
呼呼就这个简单源码在附件中呼呼.
第二种方法 很简单 只是很奇怪 昨天想用这种方法不成功 今天早上竟然好用了赞一个
LayoutInflater factory =(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
// LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);
Dialog ad= new Dialog(this, R.style.Theme_CustomDialog2);
ad.setContentView(textEntryView);
其中R.layout.alert_dialog_text_entry这个是api自带的位于res/layout
这种方法有个缺点 就是支持的api函数要比alertDialog少的多 当然了你也可以自己扩展。这样基本上就够用了 本来就是个提示。