栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第3章 Android 常见界面控件(对话框篇)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第3章 Android 常见界面控件(对话框篇)

第3章 Android 常见界面控件(对话框篇)

目录

第3章 Android 常见界面控件(对话框篇)

3.2 AlterDialog对话框的使用

3.2.1 AlterDialog对话框概述3.2.2 普通对话框3.2.3 单选对话框3.2.4 多选对话框3.2.5 自定义对话框

3.2 AlterDialog对话框的使用

AlterDialog对话框用于提示一些重要信息或显示一些需要用户额外交互的内容,一般以小窗口的形式展示在界面上

3.2.1 AlterDialog对话框概述

使用AlterDialog创建的对话框一般包含标题,内容和按钮三个区域

(1)调用alertDialog的静态内部类Builder创建alertDialog .Builder的对象

(2)调用alertDialog .Builder的setTitle()和IsetIcon()方法分别设置alertDialog对话框的标题名称和图标

(3)调用alertDialog. Builder的setMessageO、setSingleChoiceltems()或者setMultiChoiceltems()方法设置alertDialog对话框的内容为简单文本、单选列表或者为多选列表

(4)调用alertDialog.Builder的setPositiveButton()和setNegativeButton()方法设置alertDialog对话框的确定和取消按钮

(5)调用alertDialog.Builder的create()方法创建alertDialog对象

(6)调用alertDialog对象的show()方法显示该对话框

(7)调用alertDialog对 象的dismiss()方法取消该对话框

3.2.2 普通对话框

普通对话框的内容区域一般显示简单的文本信息,它是通过AlterDialog.Builder对象调用setMeeeage()设置的,setMessage方法的具体信息:

setMessage(CharSequence message)

典例:

public class MainActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public  void onBackPressed(){
        //声明对象
        final alertDialog dialog;
        alertDialog.Builder builder = new alertDialog.Builder(this);
        builder.setTitle("普通对话框");
        builder.setIcon(R.mipmap.ic_launcher);
        builder.setMessage("是否退出应用");
        //添加确定按钮
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog,int which) {
                dialog.dismiss();   //关闭对话框
                MainActivity.this.finish(); //关闭MainActivity
            }
        });
        //添加取消按钮
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        dialog = builder.create();
        dialog.show();
    }
}

上述代码重写了onBackPressed()方法用于监听用户点击“回退键”的事件

然后经过AlterDialog dialog;声明对象再通过AlterDialog.Builder builder = new AlterDialog.Builder(this)创建alertDialog .Builder的对象然后通过setTitle等方法设置对话框,以及定义其两个按钮的操作最后通过builder.create()创建AlterDialog对象,并调用其show()方法显示对话框

启动测试‘

3.2.3 单选对话框

单选对话框的内容区域显示为单选列表。单选列表是通过alertDialog. Builder对象调用setSingleChoiceItemO方法设置的。setSingleChoiceltem0方 法的语法格式如下所示:

setSingleChoiceItems (CharSequence[] items, int checkedItem, OnClickListenerlistener)

items: 表示单选列表中的所有选项数据checkedltem: 表示单选列表中的默认选项角标listener: 单选列表的监听接口

典例:

MainActivity.java文件

public class MainActivity extends AppCompatActivity{
    String res;
    String sss[] = new String[] {"全栈开发工程师", "产品经理", "前端开发工程师", "数据分析工程师"};
    public  void Text(){
         final TextView textView = (TextView)findViewById(R.id.tx);
        //声明对象
        final alertDialog dialog;
        alertDialog.Builder builder = new alertDialog.Builder(this);
        builder.setTitle("单选对话框");
        builder.setIcon(R.mipmap.bb);
        builder.setSingleChoiceItems(sss, 0, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                res=sss[which];
            }
        });
        //添加确定按钮
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog,int which) {
                textView.setText(res);
                dialog.dismiss();   //关闭对话框
            }
        });
        //添加取消按钮
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        dialog = builder.create();
        dialog.show();
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt = (Button)findViewById(R.id.bt1);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Text();
            }
        });
    }
}

activity_main.xml文件:

    
    
    

启动测试

3.2.4 多选对话框

多选对话框的内容区域显示为多选列表。多选列表是通过alertDialog Builder对象调用setMultiChoiceltems0方法设置的,setMultiChoicelterms()方法

setMultiChoiceItems (CharSequence[] i tems, int checkedItem, OnClickListenerlistener)

items: 表示多选列表中的所有选项数据checkedItem: 表示多选列表中默认勾选的选项角标listener:表示多选列表的监听接口

典例:

MainActivity.java文件

public class MainActivity extends AppCompatActivity{
    CharSequence sss[] = new CharSequence[] {"全栈开发工程师", "产品经理", "前端开发工程师", "数据分析工程师"};
    boolean ssses[] = new boolean[] {false,true,false,false};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt = (Button)findViewById(R.id.bt1);
        bt.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Text();
            }
        });
    }
    public void Text(){
        //声明对象
        alertDialog dialog;
        alertDialog.Builder builder = new alertDialog.Builder(this);
        builder.setTitle("多选对话框");
        builder.setIcon(R.mipmap.bb);
        builder.setMultiChoiceItems(sss, ssses, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                ssses[which] = isChecked;
            }
        });
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                StringBuffer sb = new StringBuffer();
                for(int i=0;i<=ssses.length-1;i++){
                    if(ssses[i]){
                        sb.append(sss[i]).append(" ");
                    }
                }
                if(sb != null){
                    Toast.makeText(MainActivity.this,""+sb,Toast.LENGTH_LONG).show();
                }
                dialog.dismiss();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        dialog = builder.create();
        dialog.show();
    }
}

代码解释:

先定义两个数组,一个CharSequence类型的数组sss和一个boolean类型的数组ssses,分别用于表示存放多选列表item的文本信息和选中状态初始化AlterDialog对象dialog,初始化AlterDialog.Builder对象builder,为builder设置titel,icon等属性,然后设置两个按钮通过builder对象的setMultiChoiceItems()方法为对话框添加多选列表,并为该列表设置监听事件,在onClick()方法中得到被点击的序号which和该item是否被选中的信息,并将isChecked的值赋给ssses[which]

activity_main.xml文件:

    
    

启动测试

3.2.5 自定义对话框

Android程序中由于界面风格不同,一般不直接使用系统提供的对话框,而是根据项目需求自定义相应的对话框样式

自定义对话框的流程:

1.现在activity_main.xml文件中添加一个Button,用来设置点击事件弹出自定义对话量

    

2.在res/layout目录下创建custom_dialog.xml布局文件,用来设计弹出对话框的布局内容


    
        
        
    
    
        

3.创建一个CustomDialog类继承自AlterDialog类,用于初始化自定义对话框中的空间以及响应按钮的点击事件

public class CustomDialog extends alertDialog{
    //显示的标题,消息,按钮
    private TextView titleTv;
    private TextView messageTv;
    private Button negtiveBn,positiveBn;
    //显示的消息
    protected CustomDialog(Context context) {
        super(context);
    }
    private  String message;
    private  String title;
    private  String positive,negtive;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.custom_dialog);
        initView();
        initEvent();
    }
    //初始化页面控件
    private void initView(){
        negtiveBn = (Button)findViewById(R.id.negtive);
        positiveBn = (Button)findViewById(R.id.positive);
        titleTv = (TextView)findViewById(R.id.title);
        messageTv = (TextView)findViewById(R.id.message);
    }
    //初始化页面控件的显示数据
    private void  refreshView(){
        //如果自定义了title和message的信息,则会在弹出框中显示
        if(!TextUtils.isEmpty(title)){
            //设置标题控件的文本为自定义的title
            titleTv.setText(title);
            //标题控件设置为显示状态
            titleTv.setVisibility(View.VISIBLE);
        }else{
            //否则标题控件设置为隐藏状态
            titleTv.setVisibility(View.GONE);
        }
        if(!TextUtils.isEmpty(message)){
            //设置标题控件的文本为自定义的message
            messageTv.setText(message);
        }
        //如果没有自定义按钮的文本,则默认显示“确认”和“取消”
        if(!TextUtils.isEmpty(positive)){
            //设置按钮控件的文本为自定义文本
            positiveBn.setText(positive);
        }else{
            positiveBn.setText("确定");
        }
        if(!TextUtils.isEmpty(negtive)){
            //设置按钮控件的文本为自定义文本
            negtiveBn.setText(negtive);
        }else{
            negtiveBn.setText("取消");
        }
    }
    //初始化界面的确定和取消的监听器
    private void  initEvent(){
        //设置“确定”按钮的点击事件的监听器
        positiveBn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if(onClickBottomListener!=null){
                    onClickBottomListener.onPositiveClick();
                }
            }
        });
        negtiveBn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                if(onClickBottomListener!=null){
                    onClickBottomListener.onNegtiveClick();
                }
            }
        });
    }
    @Override
    public void  show(){
        super.show();
        refreshView();
    }
    public interface OnClickBottomListener{
        void onPositiveClick();
        void onNegtiveClick();
    }
    //设置“确定”和“取消”按钮的回调
    public OnClickBottomListener onClickBottomListener;

    public CustomDialog setOnClickBottomListener(OnClickBottomListener onClickBottomListener){
        this.onClickBottomListener = onClickBottomListener;
        return this;
    }
	public CustomDialog setAll(String message,String title,String  negtive,String  positive){
        this.message = message;
        this.title = title;
        this.negtive = negtive;
        this.positive = positive;
        return this;
    }
}

代码解析:

14-19行代码重写了AlterDialog的onCreate()方法,在该方法中通过setContextView()方法加载布局文件custom_dialog.xml,接着调用initView()、initEvent()方法,分别用于初始化界面控件,初始化界面按钮的点击事件第28行创建了一个refreshView()方法,在此方法中先判断对话框中的tital标题控件和message信息控件的信息是否进行了自定义,若自定义了则显示自定义的信息,若没有自定义则不显示,然后判断两个按钮的信息是否进行了自定义,若没有为其设置默认信息第58行的initEvent()通过setonClickListener()方法分别设置两个按钮的点击事件监听器,在监听器的onClick()方法中调用实现按钮的点击事件的方法第78行代码重写了AlterDialog的show()方法,并在其中调用refreshView()初始化界面数据第82行创建了一个onClickBottomListener()接口,在接口中有两个待实现的方法onPositiveClick(),onNegtiveClick(),分别用于实现两个按钮的点击监听事件,在initEvent()方法中实现按钮的点击监听事件时,直接实现onClickBottomListener()接口的两个方法即可在CustomDialog类中设置两个按钮的监听事件为OnClickBottomListener接口的onPositiveClick(),onNegtiveClick()方法,在MainActivity类中实例化CustomDialog类时调用其setonClickBottomListener()方法,然后实现onPositiveClick(),onNegtiveClick()方法时等于重写了两个按钮的onClick()方法

4.在MainActivity中实现CustomDialog类并重写其中的方法

public class MainActivity extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Text();
    }
    public void Text() {
        Button bt = (Button) findViewById(R.id.bt1);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final CustomDialog dialog = new CustomDialog(MainActivity.this);
                dialog.setAll("您确定要删除信息","提示","取消","确定");
                dialog.setOnClickBottomListener(new CustomDialog.OnClickBottomListener() {
                    @Override
                    public void onPositiveClick() {
                        dialog.dismiss();
                    }
                    @Override
                    public void onNegtiveClick() {
                        dialog.dismiss();
                    }
                });
                dialog.show();
            }
        });
    }
}

启动测试


如果文章对您有所帮助,记得一键三连支持一下哦~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/710493.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号