自定义的Dialog

来源:互联网 发布:二本学校当老师 知乎 编辑:程序博客网 时间:2024/06/16 00:55


看到项目切图上的要求的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,也能完成这样,我这东西虽多点,但没一点的代码都不多,容易理解不是


   
0 0