zoukankan      html  css  js  c++  java
  • Android UI系列--对话框(一)(AlertDialog,TimePickerDialog,DatePickerDialog,ProgressDialog)

    一.Dialog介绍

    dialog就是一个在屏幕上弹出一个可以让用户做出一个选择,或者输入额外的信息的对话框,一个对话框并不会沾满我们整个的屏幕,并且通常用于模型事件当中需要用户做出一个决定后才会继续执行。

    Dialog类是dialog对话框的基类,但是我们应该避免直接使用这个类来实例化一个dialog对话框,我们应当使用其子类来得到一个对话框.

    Dialog有很多的子类实现,所以我们要定义一个对话框,使用其子类来实例化一个即可,而不要直接使用Dialog这个父类来构造

    java.lang.Object
       ↳     android.app.Dialog
    
    Known Direct Subclasses(直接子类)
    AlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, Presentation
    
    Known Indirect Subclasses(间接子类)
    DatePickerDialog, ProgressDialog, TimePickerDialog

    二.AlertDialog

    AlertDialog是Dialog的一个直接子类, 我们通常用 AlertDialog.Builder 直接实例化一个对话框对象。

    AlertDialog主要包括警告框,单选框,多选框,下拉列表弹出框,自定义弹出框(自己创建一个弹出界面)

    界面设计xml文件(main_activity.xml)如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" 
        android:orientation="vertical">
    
        <Button
            
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="创建对话框"
            android:onClick="click1" />
         <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="创建单选框"
            android:onClick="click2" />
          <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="创建多选框"
            android:onClick="click3"
            />
          <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="创建下拉框/和message不同"
            android:onClick="click4"
            />
          
             <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="获取用户名和密码"
            android:onClick="click5"
            />
    
    </LinearLayout>

    自定义xml界面(dialog.xml)文件代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        
        <EditText 
         android:id="@+id/username"  
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:hint="请输入用户名"
            />   
          <EditText 
         android:id="@+id/password"  
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:hint="请输入密码"
            />
        
    
    </LinearLayout>
    

     Java文件代码如下:

    package com.wyy.dialog;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.content.DialogInterface.OnMultiChoiceClickListener;
    import android.text.style.BulletSpan;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	}
    
    	public void click1(View v){
    		
    		AlertDialog.Builder builder=new Builder(this);
    		builder.setIcon(TRIM_MEMORY_BACKGROUND);
    		builder.setTitle("请选择:");
    		builder.setMessage("工作 重要还是生活重要?");
    		
    		builder.setPositiveButton("工作", new OnClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				
    				Toast.makeText(MainActivity.this, "工作不是为了更好的生活吗?", 0).show();
    				
    				
    			}
    		} );
    		
    		
    	builder.setNegativeButton("生活", new OnClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				Toast.makeText(MainActivity.this, "工作可能让你更有存在感", 0).show();
    				
    		
    			}
    		} );
    	
    	builder.setNeutralButton("忽略", new  OnClickListener() {
    		
    		@Override
    		public void onClick(DialogInterface dialog, int which) {
    			// TODO Auto-generated method stub
    			
    			Toast.makeText(MainActivity.this, "neutral"+which, 0).show();
    			
    		}
    	});
    	
              AlertDialog ad=builder.create();
               ad.show();
    
    	}

    public void click2(View v){ AlertDialog.Builder builder=new Builder(this); builder.setTitle("请选择您的性别"); final String[] items=new String[]{"男","女","其他"}; builder.setSingleChoiceItems(items, -1,new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this,"您选择了"+items[which], 0).show(); dialog.dismiss(); } } ); builder.show(); } public void click3(View v){ AlertDialog.Builder builder=new Builder(this); builder.setTitle("谁是最帅的明星");
     /**
                     * 第一个参数指定我们要显示的一组下拉多选框的数据集合
                     * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,
                     * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};
                     * 第三个参数给每一个多选项绑定一个监听器
                     */
                    final String[] items=new String[]{"胡歌","霍建华","李易峰","杨洋"}; 
    final boolean[] checkedItems=new boolean[]{true,false,true,false};
    builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // TODO Auto-generated method stub checkedItems[which]=isChecked; } }); builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub String text=""; for(int i=0;i<4;i++){ text+=checkedItems[i]?items[i]+",":""; } Toast.makeText(MainActivity.this, text, 0).show(); dialog.dismiss(); } }); builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); builder.show(); } public void click4(View v){ AlertDialog.Builder builder=new Builder(this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("请选择你喜欢的城市"); final String[] items=new String[]{"北京","上海","南京","深圳","南阳"}; builder.setSingleChoiceItems(items, -1, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "您选择的城市是:"+items[which], 0).show(); } }); builder.show(); } public void click5(View v){ AlertDialog.Builder builder=new Builder(this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("请输入用户名和密码");
    View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null); builder.setView(view); final EditText username=(EditText) findViewById(R.id.username); final EditText password=(EditText) findViewById(R.id.password); builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub String a=username.getText().toString().trim(); String b=password.getText().toString().trim(); Toast.makeText(MainActivity.this, "用户名:"+a+",密码:"+b, 0).show(); } }); builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); builder.show(); } }

    1.对话框1

    我们设置了3个action buttons,每一个button都为其绑定了一个 DialogInterface.OnClickListener() 的监听事件,然后在里面通过Toast吐司对话框来弹出一下我们的一些信息,which方法表示的是action button所代表的int值,which=-1就表示点击的是确定按钮,-2表示点击的是取消按钮,-3表示点击的是忽略按钮

    2.下拉框

     我们设置setItems(CharSequence[] items, DialogInterface.OnClickListener listener) 方法来设置我们的一个下拉列表框。注意:因为下拉列表框或者是下拉多选框这些都是显示在Content中的,所以message和下拉列表框这些是不能够同时存在的

    我们也可以给其绑定一个DialogInterface.OnClickListener监听器,当选中一个选项时,对话框就会消失掉。这里的which代表的是下拉列表的每个选项的索引,通过这个我们可以轻松得到用户选中的是哪一个选项。

    3.下拉单选框

    在弹出下拉单选框时,当我们选中一个选项,对话框是不会消失的,我们需要点击action button才能让对话框消失

    4.下拉多选框

    设置下拉多选框时使用的是setMultiChoiceItems方法

    5.自定义弹出对话框

    对于自定义弹出对话框,我们就需要自己指定一个自定义的布局文件。

    首先需要写一个xml的布局文件,然后在里面定义我们的布局,我们不需要在布局文件里定义Button按钮,可以通过 AlertDialog.Builder 来设置 action buttons。

    通过 View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null); 我们可以将我们的布局文件加载进来,得到一个View对象,然后通过 AlertDialog.Builder 的setView方法来设置我们的自定义弹出框。

     

  • 相关阅读:
    养花
    【bzoj1419】Red is good
    C++模板
    逆元求组合数
    【IOI2000】【洛谷1435】回文字串
    Centos 下启动mysql 报错: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)解决方法
    linux系统下进行安装phpMyAdmin(基于Centos)
    达梦数据的安装(Windows10 、linux环境下、麒麟系统下)
    2020-3-3 链表刷题(203. 移除链表元素)
    2020-02-03 刷题
  • 原文地址:https://www.cnblogs.com/alwayswyy/p/4800492.html
Copyright © 2011-2022 走看看