看到项目切图上的要求的Dialog样式,我认为很简单,自定义一个布局就OK了,结果整了好几个小时……麻蛋
下面简单说下我的怎么做的
1、首先自定义 了一个Dialog
public class MyDialog extends Dialog { private Context context; private View view; public MyDialog(Context context) { super(context); this.context = context; } public MyDialog(Context context, int theme, View view) { super(context, theme); this.context = context; this.view = view; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(view); } } 2、设置了下主题--在Values文件夹的styles文件中添加:<style name="MyDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/dialog_bg</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> </style>
注意:windowBackground 的值是自己定义的一个形状shape,代码:<shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="20dp"></corners> 四周的圆角半径 <solid android:color="@color/white"></solid> 填充颜色 </shape>
3、自定义了一个布局 名字为 Dialog_simple<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="0dp" android:layout_gravity="center_horizontal" android:layout_weight="1" android:gravity="center" android:text="注册成功" android:textColor="#323232" android:textSize="25sp" /> <TextView android:id="@id/content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_gravity="center_horizontal" android:layout_weight="2" android:gravity="center" android:textSize="18sp" android:textColor="#656565" android:text="请进行身份验证" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#d4d7d6"></View> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <Button android:id="@+id/left" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/dialog_bg1" android:gravity="center" android:textSize="25sp" android:textColor="#007cfd" android:text="先看看" /> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="#d4d7d6"></View> <Button android:id="@+id/right" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:textColor="#007cfd" android:background="@drawable/dialog_bg2" android:gravity="center" android:textSize="25sp" android:text="去认证" /> </LinearLayout> </LinearLayout> </RelativeLayout> 布局图如下:
大家看到我布局有两行标红的,设置两个按钮的背景,背景也是自定义的一个shape;
如下:
左边按钮左下角变圆:<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:bottomLeftRadius="20dp" ></corners> <solid android:color="@color/white"></solid> </shape>右边按钮右下角变圆:<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:bottomRightRadius="20dp" ></corners> <solid android:color="@color/white"></solid> </shape>
注意:有的学生问在样式设置里已经把弹出的dialog框给设置过四个圆角了为何里面还要这设置,就这阻挠了一会……
不设置就这样:
下面两个角角不变圆,好吧,我就去内部单独去这两个角角变圆……
好了运行 如下如同下面出现的图啦~~~
4、然后书写弹出dialog的地方
public void showDialog1() { View view = LayoutInflater.from(this).inflate(R.layout.dialog_simple,null); Dialog dialog = new MyDialog(this,R.style.MyDialog,view); dialog.show(); //屏幕 宽高 int screenWith = UtilTools.getScreenWidth(this); int screenHeight = UtilTools.getScreenHeight(this); WindowManager.LayoutParams p = dialog.getWindow().getAttributes(); // 获取对话框当前的参数值 p.height = (int) (screenHeight * 0.3); // 高度设置为屏幕的0.6 p.width = (int) (screenWith * 0.8); // 宽度设置为屏幕的0.65 dialog.getWindow().setAttributes(p); } 获取屏幕宽高的方法很多,项目中用的地方也挺多,写工具类,在这也给大家提供下:设置了以后就好多了…………/** * 获取屏幕宽度 * * @param context * @return */ public static int getScreenWidth(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); return dm.widthPixels; } /** * 获取屏幕高度 * * @param context * @return */ public static int getScreenHeight(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); return dm.heightPixels; }
在这地方我没写设置dialog宽高的代码,即如上的黑体代码,结果
还像那么回事……哈
好多大神自定义了复杂的Dialog,也能完成这样,我这东西虽多点,但没一点的代码都不多,容易理解不是