zoukankan      html  css  js  c++  java
  • Android界面设计之对话框——定制Toast、AlertDialog

    一、概述

      在界面设计中需要根据用户操作显示提示信息、出错信息等,就要用到对话框。Android实现提示信息显示常用有两种方式

      1、Toast

      2、AlertDialog 

    二、Toast

      Android中用来显示显示信息的一种机制,属于轻量级消息开发中使用频率很高。其特点

        1、 不接受用户操作,没有焦点

        2、 显示的时间有限,过一定的时间就会自动消失。

      使用Toast显示信息非常简单,操作如下:

    Toast toast=Toast.makeText(this, “数据加载完成”, Toast.LENGTH_LONG);//创建Toast
    
    toast.show();//显示消息

      普通的Toast外观很简单,我们也可以根据需要定制Toast,如新闻头条中实现收藏和取消收藏的信息提示,如图所示效果

     

      定制Toast主要有两个方面 

        1、 定制Toast的外观

        2、 设置Toast在屏幕位置

      实现定制Toast关键代码如下:

    Toast  toast = Toast.makeText(context, msg, Toast.LENGTH_LONG); //创建Toast
    int offsetX = 0;
    int offsetY = 0;
    toast.setGravity(Gravity.BOTTOM, offsetX, offsetY);//设置位置
    LinearLayout      ll=LayoutInflater.from(context).inflate(R.Layout.custom_toast,null);
    toast.setView(ll);//设置外观
    toast.show();

      上述案例实现完成代码如下:

    1CustomToastActivity:

    private Button  btCollect;
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            super.setContentView(R.layout.custom_toast_activity);
            initView();
        }
        private void initView(){
            btCollect=(Button)super.findViewById(R.id.btCollect);
            btCollect.setOnClickListener(this);
        }
    
        private void showToast(String txt){
            Toast tast=Toast.makeText(this, txt, Toast.LENGTH_LONG);
            tast.setGravity(Gravity.CENTER, 0, 0);
            View view=LayoutInflater.from(this).inflate(R.layout.custom_toast, null);
            TextView tvMsg=(TextView)view.findViewById(R.id.tvMsg);
            tvMsg.setText(txt);
            tast.setView(view);
            tast.show();        
        }
        public void onClick(View view) {
            String txtCollect=btCollect.getText().toString();
            if(txtCollect.equals("收藏")){
                btCollect.setText("取消收藏");
                showToast("收藏成功");
            }else{
                btCollect.setText("收藏");
                showToast("取消收藏");
            }
        }

    2 、custom_toast.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:padding="10dp"
        android:layout_height="match_parent"  android:background="@drawable/toast_shape" >
        <TextView
            android:id="@+id/tvImg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="60sp"
            android:text="★"
            android:textColor="@color/white"
             android:layout_centerHorizontal="true"
            >
        </TextView>
            
        <TextView
            android:id="@+id/tvMsg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="28sp"
            android:text="收藏成功"
            android:textColor="@color/white"
            android:layout_below="@+id/tvImg"
            android:layout_centerHorizontal="true"
            />
    
    </RelativeLayout>

    3、 toast_shape.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <solid android:color="#000000"></solid>
           <corners android:radius="10dp"/>
    </shape>
    三、对话框

    1、AlertDialog  

      简单的一种对话框,主要的目的是为用户显示一条警告信息,通过AlertDialog.Builder产生AlertDialog,主要代码如下:

    Dialog dialog = new AlertDialog.Builder(this)
                .setTitle("对话框")         // 设置标题
                .setMessage("显示提示信息。")     // 显示信息
                .setIcon(R.drawable.pic_m)     // 设置显示的Icon
    setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
    })    //设置按钮
    .create();             // 创建Dialog
    dialog.show();    // 显示对话框

    其他主要方法:
    setView : 给对话框设置自定义样式 

    setItems :设置对话框要显示的一个list,一般用于显示几个命令时 

    setSingleChoiceItems:用来设置对话框显示一系列的单选框 

    setMultiChoiceItems :用来设置对话框显示一系列的复选框 

    setNeutralButton    :普通按钮

    setPositiveButton   :给对话框添加"Yes"按钮
    setNegativeButton :对话框添加"No"按钮 

    create : 创建对话框
    show :显示对话框

    2、定制AlertDialog 

      主要使用getWindow().setContentView()设置外观,如实现退出应用对话框

     

      Activity——CustomAlertDialog代码:

    private void showExitDialog(){
            final AlertDialog exitDlg=new AlertDialog.Builder(this).create();
            exitDlg.show();//在添加内容之前执行
            Window win=exitDlg.getWindow();
      // 设置窗口的内容页面,为exit_dlg_layout.xml文件中定义view内容
            win.setContentView(R.layout.exit_dlg_layout);
            TextView tvMsg=(TextView)win.findViewById(R.id.tvMsg);
            tvMsg.setText("要退出应用吗?");
            Button btOk=(Button)win.findViewById(R.id.btOk);
            Button btCancel=(Button)win.findViewById(R.id.btCancel);
             // 为确认按钮添加事件,执行退出应用操作
            btCancel.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    exitDlg.dismiss();// 关闭对话框
                }
            });
            btOk.setOnClickListener(new View.OnClickListener() {
                public void onClick(View arg0) {
                    finish();
                    exitDlg.dismiss();// 关闭对话框
                }
            });
        }
        public void onBackPressed(){//按回退键调用
            showExitDialog();
        }

       exit_dlg_layout.xml文件:

    <?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" android:padding="10dp">
        <LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content" android:orientation="vertical" 
        android:background="@drawable/exit_dlg_shape"
        android:padding="5dp">
            <TextView 
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:gravity="center"
            android:textSize="20sp"
            android:text="温馨提示"
               android:textColor="#000000" />
        <LinearLayout android:layout_width="match_parent"
       android:layout_height="100dp" android:orientation="vertical" android:background="#ffffff">
                 <TextView 
                     android:id="@+id/tvMsg"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent" 
                     android:gravity="center_vertical"
                     android:padding="5dp"/>
            </LinearLayout>
           <LinearLayout  
                android:layout_width="match_parent"
                        android:padding="5dp"
        android:layout_height="40dp" android:orientation="horizontal">
                <Button  
                    android:id="@+id/btOk"
                    android:layout_width="wrap_content" 
                    android:layout_height="wrap_content"
                    android:text="确定"
                    android:layout_weight="1"
                    android:background="@drawable/comm_shop_detail_top_green"
                    android:layout_marginRight="2dp"    />
                     <Button  
                    android:id="@+id/btCancel"
                    android:layout_width="wrap_content" 
                    android:layout_height="wrap_content"
                    android:text="取消"
                    android:layout_weight="1"
                    android:background="@drawable/comm_shop_detail_top_black"
                    />
            </LinearLayout>
        </LinearLayout>
    
    </RelativeLayout>
    作者:杰瑞教育
    出处:http://www.cnblogs.com/jerehedu/ 
    本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
     
  • 相关阅读:
    D3制作力导向图
    page分页问题,根据页码获取对应页面的数据,接口调用
    python列表生成式、键盘输入及类型转换、字符串翻转、字母大小写、数组广播、循环语句等基础问题
    python中将已有链接的视频进行下载
    机器学习1
    python 排序算法
    LintCode 练习题
    python 装饰器的使用
    hive 学习笔记
    hive 操作
  • 原文地址:https://www.cnblogs.com/jerehedu/p/4308718.html
Copyright © 2011-2022 走看看