android基础学习【三、基础控件(ToolBar、AlertDialog、PopupWindow)】

ToolBar

简单属性设置如下图所示

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/tb"
            android:background="#ffff00"
            app:navigationIcon="@drawable/ic_apps_black_24dp"
            app:title="test"
            app:titleTextColor="#00f000"
            app:titleMarginStart="20dp"
            app:logo="@mipmap/ic_launcher"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            >
        androidx.appcompat.widget.Toolbar>

android基础学习【三、基础控件(ToolBar、AlertDialog、PopupWindow)】_第1张图片

AlertDialog

AlertDialog并不需要到布局文件中创建,而是在代码中通过构造器(AlertDialog.Builder)来构造标题、图标和按钮等内容的。
1. 创建构造器AlertDialog.Builder的对象;
2. 通过构造器对象调用setTitle、setMessage、setIcon等方法构造对话框的标题、信息和图标等内容;
3. 根据需要调用setPositive/Negative/NeutralButton()方法设置正面按钮、负面按钮和中立按钮;
4. 调用构造器对象的create方法创建AlertDialog对象;
5. AlertDialog对象调用show方法,让对话框在界面上显示。

    public void lClick(View view){
        AlertDialog.Builder builder =  new AlertDialog.Builder(this);
        builder.setIcon(R.mipmap.ic_launcher)
                .setTitle("Dialog")
                .setMessage("how are you")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.e("Alert","asure");
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.e("Alert","cancel");
                    }
                })
                .setNeutralButton("开始", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.e("Alert","start");
                    }
                })
                .create()
                .show();
    }

建造者模式的优点:

  1. 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可创建不同的产品对象。
  2. 每一个建造者都相对独立,与其他的建造者无关,因此可以很方便的替换具体建造者或增加新的具体建造者,用户使用不同的建造者即可得到不同的产品对象。符合开闭原则。
  3. 用户可以更加精细的控制产品的创建过程,将复杂的产品创建步骤费解在不同的方法中,使得创建过程更加清晰,也更方便实用程序来控制创建过程。

建造者模式缺点

  1. 建造者模式创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,如组成部分很多不同,则不适合用建造者模式,因此,适用范围受到一定的限制。
  2. 如果产品内部变化复杂,可能会需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,增加了系统的理解难度和运行成本。
PopupWindow

PopupWindow与AlertDialog的区别主要是AlertDialog不能指定显示位置,只能默认显示在屏幕最中间(当然也可以通过设置WindowManager参数来改变位置)。而PopupWindow是可以指定显示位置的。

        //获取View
        View popupView = getLayoutInflater().inflate(R.layout.popup_view,null);
        //可以对popupView中的按钮设置监听,在点击完成后可以调用popupWindow.dismiss()把popupWindow进行退出。
        Button btn1 = popupView.findViewById(R.id.btn1);
        Button btn2 = popupView.findViewById(R.id.btn2);

        popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        popupWindow.setFocusable(true);  //设置焦点,点空白处可以退出
        popupWindow.showAsDropDown(view);//相对于某个和控件的位置(正下方)

dismiss()和cancel()的区别
查看源码,发现cancel方法调用了dismiss方法,如果用户创建AlertDialog时调用了setOnCancelListeener的mCancleMessage变量时,这两种方法是不同的。
popupWindow只未继承于Dialog,只实现了dismiss

你可能感兴趣的:(Android,笔记分享,android,设计模式)