第一种:
xml文件属性设置:- 如上,id为每个item的id,会在R.java文件文件中自动生成对应值; title为每个item标签在UI中显示的值,如同TextView中的text属性; menu为下一级菜单的标签,此处为二级菜单;
在Activity或Fragment中加载菜单项: 重新父类的2个方法: //加载菜单项 @onCreateOptionsMenu(Menu menu) { //加载菜单项,R.menu.main为菜单xml文件的id getMenuInflater().inflate(R.menu.main,menu); } //每个菜单项的处理方法 @onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.action_quit: finish(); break; } }
第二种:
//通过add增加菜单项,"1"为菜单id,对菜单项作处理时, //与方法一中的menu.getItemId()相同 menu.add(menu.NONE, 1, menu.NONE, "java代码创建的菜单"); //设置二级菜单,带有子菜单的二级菜单 SubMenu subMenu = menu.addSubMenu(menu.NONE, 2, menu.NONE, "二级菜单"); subMenu.add(menu.NONE, 21, 1, "sub 2-1"); subMenu.add(menu.NONE, 22, 1, "sub 2-2"); //对菜单项的处理与一中相同;### ContextMenu上下文菜单 #### 特点 - 归属View管理 - 为任意View均可设置 - 长按弹出菜单选项 #### 使用
//为控件注册上下文菜单 registerForContextMenu(lv); //在res/menu中创建每个菜单项 //在Activity中加载菜单 @onCreateContextMenu(Menu menu,View v, ContextMenuInfo menuInfo){ getMenuInflater().inflate(R.menu.main,menu); } //对每个菜单项做出处理 @onContextItemSelected(MenuItem item){ switch(item.getItemId()) { case R.id.action_delect: break; ....... } }
//1、得到PopupMenu对象,context为上下文对象,view为需要设置弹出菜单的 //view控件 PopupMenu popupMenu=new PopupMenu(context,view); //2、加载菜单 getMenuInflater().inflate(R.menu.main,pm.getMenu()); //3、 为PopupMenu设置监听器 pm.setOnMenuItemClickListener(.....); //4、 显示PopupMenu pm.show();
//此为一个确认退出的对话框样例: //1, 得到普通对话框的创建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); //2, 构建对话框 builder.setIcon(R.drawable.ic_launcher);//设置图标 builder.setTitle("提示");//设置标题 builder.setMessage("是否确认退出?");//设置内容 //设置按钮 /** * text 按钮显示的文字 * listener 按钮处理的事件,不做任何处理填null */ builder.setNegativeButton("取消", null);//(text,listener) builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } });
// 1, 得到进度条对话框的对象 ProgressDialog pd = new ProgressDialog(this); // 2, 构建对话框 pd.setIcon(R.drawable.ic_launcher); pd.setTitle("提示"); pd.setMessage("正在加载, 请稍后...."); pd.setCancelable(false); // 设置进度条对话框的样式 // ProgressDialog.STYLE_HORIZONTAL 水平的 // ProgressDialog.STYLE_SPINNER 转圈的 pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 3, 显示对话框 pd.show(); // 设置进度值 必须要放在显示对话框之后 此处主要看下效果 pd.setProgress(70);
// 获取当前的日期 Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int monthOfYear = calendar.get(Calendar.MONTH); int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // 1, 得到日期选择对话框对象 /** * context 上下文对象 callBack onDateSetListener (日期选择器上的"确定"按钮监听器) year 默认的年 * monthOfYear 默认的月份 dayOfMonth 默认的日期 */ DatePickerDialog dp = new DatePickerDialog(this, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // 日期选择器上的"确定按钮" 的监听 String str = year + "-" + (monthOfYear + 1) + "-" + dayOfMonth; Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show(); } }, year, monthOfYear, dayOfMonth); // 2, 显示对话框 dp.show();
// 1, 得到带有时间选择器的对话框对象 /** * context 上下文对象 callBack onTimeSetListener (点击"完成" 监听器) hourOfDay 默认的小时 * minute 默认的分钟 is24HourView 是否为24小时制 */ TimePickerDialog td = new TimePickerDialog(this, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { // 点击的是时间选择器上的"完成" Toast.makeText(MainActivity.this, hourOfDay + ":" + minute, Toast.LENGTH_LONG) .show(); } }, 15, 10, true); // 2, 显示对话框 td.show();
// 1, 得到对话框的创建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); // 2, 构建对话框 builder.setIcon(R.drawable.ic_launcher); builder.setTitle("用户登陆"); View view = getLayoutInflater().inflate(R.layout.login, null); final EditText nameEdit = (EditText) view.findViewById(R.id.name_id); final EditText pwdEdit = (EditText) view.findViewById(R.id.pwd_id); builder.setView(view); builder.setNegativeButton("取消", null); builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String name = nameEdit.getText().toString(); String pwd = pwdEdit.getText().toString(); Toast.makeText(MainActivity.this, name + " , " + pwd, Toast.LENGTH_LONG).show(); } }); // 3, 显示对话框 builder.show();
//1.得到普通对话框的创建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); //2.构建对话框 builder.setIcon(R.drawable.ic_launcher); builder.setTitle("选择颜色"); //设置列表 /** * items 列表的数组 * listener 每个Item的监听 */ //String[] colors =getResources().getStringArray(R.array.colors); builder.setItems(R.array.colors, new OnClickListener() { /** * DialogInterface dialog 当前对话框 * int which 用户当前选中的列表 从0开始 */ @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: tv.setTextColor(Color.RED); break; case 1: tv.setTextColor(Color.GREEN); break; case 2: tv.setTextColor(Color.BLUE); break; } } }); //3.显示对话框 builder.show();
// 1.得到普通对话框的创建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); // 2.构建对话框 builder.setIcon(R.drawable.ic_launcher); builder.setTitle("设置文字大小"); // 设置单选列表 String[] sizes = { "文字大小为:20", "文字大小为:30", "文字大小为:40" }; // 第二个参数 : 默认选中Item的下标 如果没有默认选中: checkedItem 为-1 builder.setSingleChoiceItems(sizes, -1, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 记录当前选中的是那一个 position = which; } }); builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 根据记录的选中的内容, 去设置TextSize switch (position) { case 0: tv.setTextSize(20); break; case 1: tv.setTextSize(30); break; case 2: tv.setTextSize(40); break; } } }); // 3, 显示对话框 builder.show();
// 1.得到普通对话框的创建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); // 2.构建对话框 builder.setIcon(R.drawable.ic_launcher); builder.setTitle("请选择您的爱好"); //设置多选列表 final String[] hobbys = { "游戏", "电影", "学习", "看书", "敲代码" }; final boolean[] checkedItems = new boolean[hobbys.length]; builder.setMultiChoiceItems(hobbys, checkedItems, new OnMultiChoiceClickListener() { /** * DialogInterface dialog 当前对话框 int which 当前选中*的Item的下标 * boolean isChecked 当前选中的Item对应的状态 */ @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // 记录当前item状态 checkedItems[which] = isChecked; } }); builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { StringBuilder sBuilder = new StringBuilder(); // 根据状态, 设置内容 for (int i = 0; i
// 1, 得到普通对话框的创建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); // 2, 构建对话框 builder.setIcon(R.drawable.ic_launcher); builder.setTitle("请选择你的操作"); // 设置适配器列表 String[] data = { "声音设置", "WIFI设置", "设置" }; ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, data); builder.setAdapter(adapter, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(); switch (which) { case 0: intent.setAction("android.settings.SOUND_SETTINGS"); break; case 1: intent.setAction("android.settings.WIFI_SETTINGS"); break; case 2: intent.setAction("android.settings.SETTINGS"); break; } startActivity(intent); } }); // 3, 显示对话框 builder.show(); // builder.create().show(); // builder.create().dismiss();对话框消失
public PopupWindow (Context context)
public PopupWindow(View contentView)
public PopupWindow(View contentView, int width, int height)
public PopupWindow(View contentView, int width, int height, boolean focusable)
根据他的构造函数,一般使用第三个构造方法
例如:
PopupWindow window = new PopupWindow(view,LayoutParams.MATCH_PARENT,
主布局activity_main:
popupWindow显示布局popup_item:
MainActivity.java:
package com.example.popupwindowdemo; import android.os.Bundle; import android.text.Layout; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.PopupWindow; import android.app.Activity; public class MainActivity extends Activity { //数据: private String[] data = { "Java", "C++", "C", "Android" }; //此处数据简单,用ArrayAdapter即可 private ArrayAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //将数据放入adapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, data); } public void showPopupWindow(View view) { //此为popupWindow弹出控件的布局文件,将popup_item通过LayoutInflater转化为View View contentView = LayoutInflater.from(MainActivity.this).inflate( R.layout.popup_item, null); //从contentView中找到listView视图 ListView listView=(ListView) contentView.findViewById(R.id.list_view); //将数据放入listView listView.setAdapter(adapter); //1.实例化PopupWindow对象 PopupWindow popupWindow = new PopupWindow(contentView, 300, LayoutParams.WRAP_CONTENT); //2.显示popupWindow View rootview = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_main, null); popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); //此处就不再设置listView的点击事件了,这个一个简单的popupWindow的展示 } }