android自定义全屏dialog和button样式

啥也不说先上图。
在这里插入图片描述

第一部分 dialog全屏与外部padding透明:

做这种全屏的dialog,还踩了一点小坑,比如全屏后有黑背景,无法padding等问题。在此记录。

  1. 第一步,准备一个layout/xxxlayout.xml, 包含
    一个整体的外部布局(RelativeLayout;Linearlayout;ConstraintLayout等)
    给它设置属性:
	android:background="@drawable/inset_bg"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
  1. 创建drawable/inset_bg.xml, 用于做上面layout的背景,作用是padding边缘:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
       android:drawable="@color/white"
       android:insetBottom="100dp"
       android:insetLeft="20dp"
       android:insetRight="40dp"
       android:insetTop="60dp"/>
  1. java代码,就是普通的dailog操作。不过要注意一些全屏的设置:
private Dialog mDialog = null;

    private Dialog buildAlert(String title, String fist, String second, final int mode) {
        if (mDialog != null) {
            mDialog.dismiss();
            mDialog = null;
        }
        View view = getLayoutInflater().inflate(R.layout.dialog_mallcenter_alert, null);
        mDialog = new Dialog(this, R.style.MallCenterDialog);
        mDialog.getWindow().setGravity(Gravity.TOP);
        //这句话才会让背景不黑。
        mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        mDialog.setCanceledOnTouchOutside(false);
        mDialog.setContentView(view);
        mDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

        TextView titleTv = (TextView)view.findViewById(R.id.titleTextView);
        titleTv.setText(title);

        Button positiveButton = (Button) view.findViewById(R.id.firstSideBtn);
        positiveButton.setText(fist);
        positiveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mode == 1) {
                    startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
                } else if (mode == 2) {
                    try {
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                mDialog.dismiss();
            }
        });
        Button negativeButton = (Button) view.findViewById(R.id.secondSideBtn);
        negativeButton.setText(second);
        negativeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.dismiss();
            }
        });
        return mDialog;
    }
    
     mDialog.show();

第二部分 button样式

  1. 给Button设置
	填充
	android:background="@drawable/corner_dialog_btn_bm_selector"
	中空
	android:background="@drawable/corner_dialog_btn_frame_selector"
  1. drawable 6个文件:

填充背景的selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 按压时 -->
    <item android:drawable="@drawable/corner_dialog_btn_bm_bg_p" android:state_pressed="true" />
    <!-- 默认时 -->
    <item android:drawable="@drawable/corner_dialog_btn_bm_bg" />
</selector>

渐变填充背景色按钮(按压与不按压):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#99FFA54F"
        android:endColor="#99FFC0CB"
        android:angle="135" />
    <corners android:radius="33dp"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#FFA54F"
        android:endColor="#FFC0CB"
        android:angle="135" />
    <corners android:radius="33dp"/>
</shape>

中空按钮3个drawable文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 按压时 -->
    <item android:drawable="@drawable/corner_dialog_btn_frame_bg_p" android:state_pressed="true" />
    <!-- 默认时 -->
    <item android:drawable="@drawable/corner_dialog_btn_frame_bg" />
</selector>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!--圆角-->
    <corners android:radius="33dp"/>
    <!--中间颜色-->
    <solid android:color="#99eeeeee"/>
    <!--边框/颜色-->
    <stroke
            android:width="2dp"
            android:color="#eeeeee"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!--圆角-->
    <corners android:radius="33dp"/>
    <!--中间颜色-->
    <solid android:color="@android:color/transparent"/>
    <!--边框/颜色-->
    <stroke
            android:width="2dp"
            android:color="#eeeeee"/>
</shape>

如果你的需求不是渐变按钮,背景,可以将startColor和endColor改成一样,或者参考中空按钮改下代码。

猜你喜欢

转载自blog.csdn.net/jzlhll123/article/details/84398989
今日推荐