Android详细的对话框AlertDialog.Builder使用方法和自定义样式

Android详细的对话框AlertDialog.Builder使用方法

Android一共有三种形式的菜单:
1.选项菜单(optinosMenu)
2.上下文菜单(ContextMenu)
3.子菜单(subMenu)
其中最常用的就是选项菜单(optionsMenu), 该菜单在点击 menu 按键 后会在对应的Activity底部显示出来。

1.Activity菜单机制 (与dialog类似)
Activity有一套机制来实现对菜单的管理,方法如下:
1.1.public boolean onCreateOptionsMenu(Menu menu)
此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例。
返回true则显示该menu,false 则不显示;
(只会在第一次初始化菜单时调用)

1.2.public boolean onPrepareOptionsMenu(Menu menu)
在onCreateOptionsMenu执行后,菜单被显示前调用;如果菜单已经被创建,则在菜单显示前被调用。
同样的, 返回true则显示该menu,false 则不显示;
(可以通过此方法动态的改变菜单的状态,比如加载不同的菜单等)

1.3.public void onOptionsMenuClosed(Menu menu)
每次菜单被关闭时调用.
(菜单被关闭有三种情形,menu按钮被再次点击、back按钮被点击或者用户选择了某一个菜单项)

1.4.public boolean onOptionsItemSelected(MenuItem item)
菜单项被点击时调用,也就是菜单项的监听方法。

通过这几个方法,可以得知,对于Activity,同一时间只能显示和监听一个Menu 对象。

2. 添加菜单:
可以在onCreateOptionsMenu或者onPrepareOptionsMenu方法中来添加菜单

2.1代码添加:
menu.add((int groupId, int itemId, int order, charsequence title) .setIcon(drawable ID) 
add()方法的四个参数,依次是:  

1、组别,如果不分组的话就写Menu.NONE,  

2、Id,这个很重要,Android根据这个Id来确定不同的菜单  

3、顺序,哪个菜单项在前面由这个参数的大小决定  

4、文本,菜单项的显示文本

add()方法返回的是MenuItem对象,调用其setIcon()方法,为相应MenuItem设置Icon

示例:
public boolean onCreateOptionsMenu(Menu menu) {
 super.onCreateOptionsMenu(menu);
 menu.add(Menu.NONE, Menu.First+1, 0, "设置").setIcon(R.drawable.setting);
 return true;
}

2.2布局文件添加:

getMenuInflater().inflate(R.menu.options_menu, menu);

调用Activity的getMenuInflater()得到一个MenuInflater, 
使用inflate方法来把布局文件中的定义的菜单 加载给 第二个参数所对应的menu对象

示例:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
 super.onCreateOptionsMenu(menu);
 getMenuInflater().inflate(R.menu.options_menu, menu);
 return true;
}

布局文件:
在res目录下建立一个menu文件夹,并创建布局文件: options_menu.xml 
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_setting" android:title="设置" android:icon="@drawable/setting"></item>
</menu>


3.菜单项监听:

只要菜单中的菜单项被点击,都会触发onOptionsItemSelected(MenuItem item)
item参数即为被点击的菜单项,那么需要在此方法内判断哪个Item被点击了,从而实现不同的操作。
对于两种不同的添加菜单方法,判断的方法有一点区别,但本质是一样的。

3.1代码添加菜单的判断方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
 super.onOptionsItemSelected(item);
 switch(item.getItemId())//得到被点击的item的itemId
 {
 case Menu.First+1: //对应的ID就是在add方法中所设定的Id
  break;
 case Menu.First+2:
  break;
 }
 return true;
}

3.2布局文件添加菜单的判断方法:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
 super.onOptionsItemSelected(item);
 switch(item.getItemId())//得到被点击的item的itemId
 {
 case R.id.menu_setting://这里的Id就是布局文件中定义的Id,在用R.id.XXX的方法获取出来
  break;
 case R.id.menu_info:
  break;
 }
 return true;
}

4.最简单的应用:
在android中可以这样实现。

4.1弹出一个消息框:
new AlertDialog.Builder(this)
.setTitle("标题")
.setMessage("简单消息框")
.setPositiveButton("确定", null)
.show();

4.2带确认和取消按钮的对话框:
new AlertDialog.Builder(this)
.setTitle("确认")
.setMessage("确定吗?")
.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
setResult(RESULT_OK);
}})
.setNegativeButton("否", null)
.show();

4.3可以输入文本的对话框:
new AlertDialog.Builder(this)
.setTitle("请输入")
.setIcon(android.R.drawable.ic_dialog_info)
.setView(new EditText(this))
.setPositiveButton("确定", null)
.setNegativeButton("取消", null)
.show();

4.4单选框:
new AlertDialog.Builder(this)
.setTitle("单选框")
.setIcon(android.R.drawable.ic_dialog_info)
.setSingleChoiceItems(new String[] {"选项1","选项2","选项3","选项4"}, 0, new DialogInterface.OnClickListener() {
 public void onClick(DialogInterface dialog, int which) {
  dialog.dismiss();
 }
})
.setNegativeButton("取消", null)
.show();

4.5多选框:
new AlertDialog.Builder(this)
.setTitle("多选框")
.setMultiChoiceItems(new String[] {"选项1","选项2","选项3","选项4"}, null, null)
.setPositiveButton("确定", null)
.setNegativeButton("取消", null)
.show();

4.6列表对话框:
new AlertDialog.Builder(this)
.setTitle("列表框")
.setItems(new String[] {"列表项1","列表项2","列表项3"}, null)
.setNegativeButton("确定", null)
.show();

4.7图片对话框:
new AlertDialog.Builder(this)
.setTitle("图片框")
.setView(img)
.setPositiveButton("确定", null)
.show();

 
1.      定义布局文件:alertdialog_item.xml,因为列表的每一项的样式都是从布局文件设置的,注意的是布局文件是一个TextView
<?xml version= "1.0" encoding= "utf-8"?>
<TextViewxmlns:android= "http://schemas.android.com/apk/res/android"
    android:id= "@+id/alertdialog_item"
    android:layout_width= "fill_parent"
  android:layout_height= "30dp"
    android:layout_gravity= "center_horizontal"
    android:gravity= "center_horizontal"
    android:textColor= "#000000"
    android:background="#668B8B"
    android:textSize="28px" >
</TextView>
2.      设置AlertDialog的总体样式,比如说割线的高度,这时候在style.xml配置
<!-- 自定义AlertDialog的样式 -->
    <stylename="AlertDialogCustom">
       <item name="android:dividerHeight">5dp</item>
        <itemname="android:width">100dp</item>
    </style>
3.      在Activity上设置相应的AlertDialog
   String[] menu_names =new String[]{"进入","取消","删除","删除全部"};
    AlertDialog.Builder builder  = new AlertDialog.Builder(new ContextThemeWrapper(this,R.style.AlertDialogCustom));
    builder.setAdapter(newArrayAdapter(WeiXunListActivity.this, R.layout.alertdialog_item,menu_names),null);
    builder.create().show();
4.      显示效果如下

 

 

Android的AlertDialog详解
2012-05-16 14:02:41      我来说两句      
收藏    我要投稿

AlertDialog的构造方法全部是Protected的,所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。

要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法。

使用AlertDialog.Builder创建对话框需要了解以下几个方法:

setTitle :为对话框设置标题
setIcon :为对话框设置图标
setMessage:为对话框设置内容
setView : 给对话框设置自定义样式
setItems :设置对话框要显示的一个list,一般用于显示几个命令时
setMultiChoiceItems :用来设置对话框显示一系列的复选框
setNeutralButton    :普通按钮

setPositiveButton   :给对话框添加"Yes"按钮
setNegativeButton :对话框添加"No"按钮
create : 创建对话框
show :显示对话框
一、简单的AlertDialog

下面,创建一个简单的ALertDialog并显示它:


[java]  package com.tianjf; 
 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.os.Bundle; 
 
public class Dialog_AlertDialogDemoActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
 
        Dialog alertDialog = new AlertDialog.Builder(this). 
                setTitle("对话框的标题"). 
                setMessage("对话框的内容"). 
                setIcon(R.drawable.ic_launcher). 
                create(); 
        alertDialog.show(); 
    } 

package com.tianjf;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;

public class Dialog_AlertDialogDemoActivity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  Dialog alertDialog = new AlertDialog.Builder(this).
    setTitle("对话框的标题").
    setMessage("对话框的内容").
    setIcon(R.drawable.ic_launcher).
    create();
  alertDialog.show();
 }
}运行结果如下:

 \

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值