• Android 自定义Dialog


    1、drawable

      

    1 <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    2     <corners android:radius="10dp"/>
    3 
    4 </shape>
    dialog_bg
    1 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    2     <corners
    3         android:topLeftRadius="10dp"
    4         android:topRightRadius="10dp"/>
    5     
    6     <solid android:color="#DEDBDE"/>
    7 
    8 </shape>
    top_style
    1 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    2     <corners 
    3         android:bottomLeftRadius="10dp"
    4         android:bottomRightRadius="10dp"/>
    5     
    6     <solid 
    7         android:color="@android:color/white"/>
    8 
    9 </shape>
    bottom_style
    1 <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    2     <corners android:radius="50dp"/>
    3     
    4     <solid android:color="@android:color/holo_orange_light"/>
    5 
    6 </shape>
    update
    1 <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    2     <corners android:radius="50dp"/>
    3     
    4     <solid android:color="@android:color/darker_gray"/>
    5 
    6 </shape>
    cancel

    2、

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     android:layout_width="match_parent"
     3     android:layout_height="match_parent"
     4     android:orientation="vertical" >
     5 
     6     <Button
     7         android:id="@+id/btn_test"
     8         android:layout_width="match_parent"
     9         android:layout_height="wrap_content"
    10         android:onClick="alertDialog"
    11         android:text="测试点击打开Dialog" />
    12 
    13 </LinearLayout>
    activity_main
     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     android:id="@+id/rl"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:background="@android:color/darker_gray" >
     6 
     7     <LinearLayout
     8         android:id="@+id/ll"
     9         android:layout_width="match_parent"
    10         android:layout_height="wrap_content"
    11         android:layout_centerInParent="true"
    12         android:layout_marginLeft="50dp"
    13         android:layout_marginRight="50dp"
    14         android:background="@drawable/dialog_bg"
    15         android:gravity="center"
    16         android:orientation="vertical" >
    17 
    18         <TextView
    19             android:layout_width="match_parent"
    20             android:layout_height="wrap_content"
    21             android:background="@drawable/top_style"
    22             android:gravity="center"
    23             android:padding="10dp"
    24             android:text="提示"
    25             android:textSize="20sp" />
    26 
    27         <TextView
    28             android:layout_width="match_parent"
    29             android:layout_height="wrap_content"
    30             android:background="@android:color/white"
    31             android:gravity="center"
    32             android:padding="20dp"
    33             android:text="发现新版本"
    34             android:textSize="18sp" />
    35 
    36         <TextView
    37             android:layout_width="match_parent"
    38             android:layout_height="wrap_content"
    39             android:background="@android:color/white"
    40             android:gravity="center"
    41             android:padding="20dp"
    42             android:text="v3.5.0 → v3.5.1"
    43             android:textSize="18sp" />
    44 
    45         <LinearLayout
    46             android:layout_width="match_parent"
    47             android:layout_height="wrap_content"
    48             android:background="@drawable/bottom_style"
    49             android:gravity="center_horizontal"
    50             android:orientation="horizontal" >
    51 
    52             <Button
    53                 android:id="@+id/negative"
    54                 android:layout_width="0dp"
    55                 android:layout_height="wrap_content"
    56                 android:layout_margin="20dp"
    57                 android:layout_weight="1"
    58                 android:background="@drawable/cancel"
    59                 android:gravity="center"
    60                 android:padding="5dp"
    61                 android:text="取  消"
    62                 android:textColor="@android:color/white"
    63                 android:textSize="18sp" />
    64 
    65             <Button
    66                 android:id="@+id/positive"
    67                 android:layout_width="0dp"
    68                 android:layout_height="wrap_content"
    69                 android:layout_margin="20dp"
    70                 android:layout_weight="1"
    71                 android:background="@drawable/update"
    72                 android:gravity="center"
    73                 android:padding="5dp"
    74                 android:text="更  新"
    75                 android:textColor="@android:color/white"
    76                 android:textSize="18sp" />
    77         </LinearLayout>
    78     </LinearLayout>
    79 
    80 </RelativeLayout>
    Dialog

    3、Dialog主题  values/styles

    1 <style name="DialogTheme">
    2         <item name="android:windowNoTitle">true</item>
    3         <item name="android:windowBackground">@android:color/transparent</item>
    4         <item name="android:windowIsFloating">false</item>
    5     </style>
    DialogTheme

    4、MyDialog继承Dialog

     1 public class MyDialog extends Dialog {
     2 
     3     private RelativeLayout rl;
     4     private LinearLayout ll;
     5 
     6     private Button positive,negative;
     7     private String positiveButtonText,negativeButtonText;
     8     private DialogInterface.OnClickListener positiveButtonClickListener;
     9     private DialogInterface.OnClickListener negativeButtonClickListener;
    10 
    11     public MyDialog(Context context) {
    12         super(context, R.style.DialogTheme);
    13     }
    14 
    15     @Override
    16     protected void onCreate(Bundle savedInstanceState) {
    17         super.onCreate(savedInstanceState);
    18         setContentView(R.layout.dialog);
    19         initView();
    20     }
    21 
    22     //提供给外部访问设置
    23     public void setPositiveButton(String positiveButtonText, DialogInterface.OnClickListener listener){
    24         this.positiveButtonText = positiveButtonText;
    25         this.positiveButtonClickListener = listener;
    26     }
    27     
    28     public void setNegativeButton(String negativeButtonText, DialogInterface.OnClickListener listener){
    29         this.negativeButtonText = negativeButtonText;
    30         this.negativeButtonClickListener = listener;
    31     }
    32     
    33     private void initView() {
    34         // 设置点击Dialog以外的地方可以关闭Dialog
    35         //本次测试需要自定义效果,暂且设置不浮动,Dialog占满全屏,使用相对布局,Dialog可见内容部分居中,点击之外的部分可关闭对话框
    36         initCanceledOnTouchOutside();
    37         initPositiveButton();
    38         initNegativeButton();
    39     }
    40     
    41     //初始化positiveButton,当外部调用setPositiveButton时,传递positiveButtonText,并实现接口,回调onClick方法
    42     private void initPositiveButton() {
    43         if(positiveButtonText!=null){
    44             positive = (Button) findViewById(R.id.positive);
    45             positive.setText(positiveButtonText);
    46         }
    47         if(positiveButtonClickListener!=null){
    48             //外部不自己设置就直接使用xml中默认的
    49             positive = (Button) findViewById(R.id.positive);
    50             positive.setOnClickListener(new View.OnClickListener() {
    51                 @Override
    52                 public void onClick(View v) {
    53                     positiveButtonClickListener.onClick(MyDialog.this, DialogInterface.BUTTON_POSITIVE);
    54                 }
    55             });
    56         }
    57     }
    58 
    59     private void initNegativeButton() {
    60         if(negativeButtonText!=null){
    61             negative = (Button) findViewById(R.id.negative);
    62             negative.setText(negativeButtonText);
    63         }
    64         if(negativeButtonClickListener!=null){
    65             //外部不自己设置就直接使用xml中默认的
    66             negative = (Button) findViewById(R.id.negative);
    67             negative.setOnClickListener(new View.OnClickListener() {
    68                 @Override
    69                 public void onClick(View v) {
    70                     negativeButtonClickListener.onClick(MyDialog.this, DialogInterface.BUTTON_NEGATIVE);
    71                 }
    72             });
    73         }
    74     }
    75     
    76     
    77     private void initCanceledOnTouchOutside() {
    78         rl = (RelativeLayout) findViewById(R.id.rl);
    79         ll = (LinearLayout) findViewById(R.id.ll);
    80 
    81         rl.setOnTouchListener(new OnTouchListener() {
    82             @Override
    83             public boolean onTouch(View v, MotionEvent event) {
    84                 dismiss();// 关闭对话框
    85                 return false;
    86             }
    87         });
    88         ll.setOnClickListener(new View.OnClickListener() {
    89 
    90             @Override
    91             public void onClick(View v) {
    92 
    93             }
    94 
    95         });
    96     }
    97 }
    MyDialog

    5、MainActivity

     1 public class MainActivity extends Activity {
     2 
     3     
     4     @Override
     5     protected void onCreate(Bundle savedInstanceState) {
     6         super.onCreate(savedInstanceState);
     7         setContentView(R.layout.activity_main);
     8     }
     9 
    10     public void alertDialog(View v){
    11         MyDialog dialog = new MyDialog(this);
    12         
    13         dialog.setPositiveButton("更新你妹", new DialogInterface.OnClickListener() {
    14             @Override
    15             public void onClick(DialogInterface dialog, int which) {
    16                 //设置你的操作,这里只做关闭对对话框操作
    17                 dialog.dismiss();
    18             }
    19         });
    20         
    21         dialog.setNegativeButton("取消你弟", new DialogInterface.OnClickListener() {
    22             @Override
    23             public void onClick(DialogInterface dialog, int which) {
    24                 //设置你的操作,这里只做关闭对话框操作
    25                 dialog.dismiss();
    26                 
    27             }
    28         });
    29         
    30         dialog.show();
    31         //使用这个函数设置,必须在自定义Dialog的主题中设置name="android:windowIsFloating">true,否则Dialog将使用全屏
    32         //本次测试需要自定义效果,暂且设置不浮动,Dialog占满全屏,使用相对布局,Dialog可见内容部分居中,点击之外的部分可关闭对话框
    33         //diaolg.setCanceledOnTouchOutside(true);
    34         
    35         
    36         
    37     }
    38 }
    MainActivity
  • 相关阅读:
    JavaScript高级
    MVC分页
    MySQL8版本grant报错:ERROR 1410 (42000)
    binlog2sql安装及用法简介
    Redis内存碎片优化参数
    Redis工具redis-rdb-tools和redisimp
    从MySQL全备中恢复单库或单表数据
    linux登录时候提示字符集有问题
    Redis启停脚本
    linux修改当前用户环境变量永久生效
  • 原文地址:https://www.cnblogs.com/Claire6649/p/5968947.html
Copyright © 2020-2023  润新知