Android 各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果
菜单弹出效果
手机屏幕有限,经常使用,方便显示更多功能。
在android 4.0之前对于系统的菜单可以显示选项图片,
package com.ncsyeyy.YeyyOptionMenu;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MyActivity extends Activity {
// 定义Menu中每个菜单选项的Id
private final static int Menu_1= Menu.FIRST;
private final static int Menu_2= Menu.FIRST+1;
private final static int Menu_3= Menu.FIRST+2;
private final static int Menu_4= Menu.FIRST+3;
private final static int Menu_5= Menu.FIRST+4;
private final static int Menu_6= Menu.FIRST+5;
private final static int Menu_7= Menu.FIRST+6;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public boolean onCreateOptionsMenu(Menu menu){
// 参数menu就是拿到的当前activity菜单对象
// 想要给当前页面添加方法的话就add进去即可
// add方法的参数:add(分组id,itemid,排序,菜单文字)
menu.add(0,Menu_1,0,"编辑模式");
menu.add(0,Menu_2,0,"修改壁纸");
menu.add(0,Menu_3,0,"全局搜索");
menu.add(0,Menu_4,0,"桌面缩略图");
menu.add(0,Menu_5,0,"桌面效果");
menu.add(0,Menu_6,0,"系统设置");
menu.add(0,Menu_7,0,"用户信息");
return super.onCreateOptionsMenu(menu);
}
// Menu菜单选项的选择的回调事件
public boolean onOptionsItemSelected(MenuItem item){
// 参数为用户选择的菜单选项对象
// 根据菜单选项的id来执行相应的功能
switch (item.getItemId()){
case 1:
Toast.makeText(this,"你单击了编辑模式选项",Toast.LENGTH_LONG).show();
break;
case 2:
Toast.makeText(this,"你单击了修改壁纸选项",Toast.LENGTH_LONG).show();
break;
case 3:
Toast.makeText(this,"你单击了全局搜索选项",Toast.LENGTH_LONG).show();
break;
case 4:
Toast.makeText(this,"你单击了桌面缩略图选项",Toast.LENGTH_LONG).show();
break;
case 5:
Toast.makeText(this,"你单击了桌面效果选项",Toast.LENGTH_LONG).show();
break;
case 6:
Toast.makeText(this,"你单击了系统设置选项",Toast.LENGTH_LONG).show();
break;
case 7:
Toast.makeText(this,"你单击了用户信息选项",Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
// 选项菜单关闭时的回调方法
public void onOptionsMenuClosed(Menu menu){
Log.e("onOptionsMenuClosed","用户菜单关闭了");
}
// 菜单显示之前的回调方法
public boolean onPrepareOptionsMenu(Menu menu){
Log.e("onPrepareOptionsMenu","用户菜单准备好被显示了");
return true;
}
}
菜单新建文件,保存文件,打开文件
菜单具有层级效果
Java代码:
package com.ncsyeyy.YeyyOpenMenu;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;
public class MyActivity extends Activity {
// 定义Menu中每个菜单选项的id
final int Menu_1 = Menu.FIRST;
final int Menu_2 = Menu.FIRST + 1;
final int Menu_3 = Menu.FIRST + 2;
final int Menu_4 = Menu.FIRST + 3;
final int Menu_5 = Menu.FIRST + 4;
final int Menu_6 = Menu.FIRST + 5;
final int Menu_7 = Menu.FIRST + 6;
final int Menu_8 = Menu.FIRST + 7;
final int Menu_9 = Menu.FIRST + 8;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
// 创建Menu菜单的回调方法
public boolean onCreateOptionsMenu(Menu menu) {
// 定义子菜单,然后添加到Menu中
SubMenu fileMenu = menu.addSubMenu("新建");
// 在菜单选项的子菜单中添加选项内容
// add放啊发的参数,add(分组id,特迷倒,排序,菜单文字)
fileMenu.add(0, Menu_1, 0, "文件1");
fileMenu.add(0, Menu_2, 0, "文件2");
fileMenu.add(0, Menu_3, 0, "文件3");
SubMenu openMenu = menu.addSubMenu("打开");
// 在菜单选项的子菜单中添加选项内容
// add方法的参数,add(分组id,特迷倒,排序,菜单文字)
openMenu.add(0, Menu_4, 0, "文件4");
openMenu.add(0, Menu_5, 0, "文件5");
openMenu.add(0, Menu_6, 0, "文件6");
SubMenu saveMenu = menu.addSubMenu("保存");
// 在菜单选项的子菜单中添加选项内容
// add方法的参数,add(分组id,itemid,排序,菜单文字)
saveMenu.add(0, Menu_7, 0, "文件7");
saveMenu.add(0, Menu_8, 0, "文件8");
saveMenu.add(0, Menu_9, 0, "文件9");
return super.onCreateOptionsMenu(menu);
}
// Menu菜单选项的选项选择的回调事件
public boolean onOptionsItemSelected(MenuItem item) {
// 参数为用户选择的菜单选项对象
// 根据菜单选项的id来执行相应的功能
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "新建文件1", Toast.LENGTH_LONG).show();
break;
case 2:
Toast.makeText(this, "新建文件2", Toast.LENGTH_LONG).show();
break;
case 3:
Toast.makeText(this, "新建文件3", Toast.LENGTH_LONG).show();
break;
case 4:
Toast.makeText(this, "新建文件4", Toast.LENGTH_LONG).show();
break;
case 5:
Toast.makeText(this, "新建文件5", Toast.LENGTH_LONG).show();
break;
case 6:
Toast.makeText(this, "新建文件6", Toast.LENGTH_LONG).show();
break;
case 7:
Toast.makeText(this, "新建文件7", Toast.LENGTH_LONG).show();
break;
case 8:
Toast.makeText(this, "新建文件8", Toast.LENGTH_LONG).show();
break;
case 9:
Toast.makeText(this, "新建文件9", Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
长按复制粘贴全选文字
android中的上下文菜单类似于Windows中的鼠标右键,针对不同的控件显示不同的菜单选项。
最主要的应用就是在ListView中了,通过长按一个item,可以做修改删除的功能
package com.ncsyeyy.YeyyCopyPaste;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MyActivity extends Activity {
final int Menu_1= Menu.FIRST;
final int Menu_2= Menu.FIRST+1;
final int Menu_3= Menu.FIRST+2;
private EditText et;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et = (EditText) findViewById(R.id.et);
// 给EditText注册上下文菜单
registerForContextMenu(et);
}
// 创建ContextMenu菜单的回调方法
public void onCreateContextMenu(ContextMenu menu,View view,
ContextMenu.ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu,view,menuInfo);
// 在上下文菜单选项中添加选项内容
// add方法的参数:add(分组id,itemid,排序,菜单文字)
menu.add(0,Menu_1,0,"复制文字");
menu.add(0,Menu_2,0,"粘贴文字");
menu.add(0,Menu_3,0,"全选文字");
}
// ContextMenu菜单选项的选项选择的回调事件
public boolean onContextItemSelected(MenuItem item){
// 参数为用户选择的菜单选项对象
// 根据菜单选项的id来执行相应的功能
switch (item.getItemId()){
case 1:
Toast.makeText(this,"复制文字",Toast.LENGTH_LONG).show();
break;
case 2:
Toast.makeText(this,"粘贴文字",Toast.LENGTH_LONG).show();
break;
case 3:
Toast.makeText(this,"全选文字",Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
自定义菜单:图片加文字
思路:
1.item布局文件
2.菜单容器GridView
3.javaBean 实体对象类,构造函数
4.adapter适配item,为自定义Menu中的GridView来使用,在getView方法在此方法中通过LayoutInflater类,
加载之前的menu_item的布局作为当前的视图布局,然后得到对应的控件设置相应的数据。
5.activity中功能实现。
第一:自定义item布局文件
第三:javaBean 实体对象类,构造函数
package com.ncsyeyy.YeyyCustomMenu;
/**
* Created by yeyy on 9/17/2015.
*/
public class Item {
public int itemImg;
public String itemTitle;
public Item(int itemImg, String itemTitle) {
super();
this.itemImg = itemImg;
this.itemTitle = itemTitle;
}
}
第四:adapter适配item,为自定义Menu中的GridView来使用,在getView方法在此方法中通过LayoutInflater类,
加载之前的menu_item的布局作为当前的视图布局,然后得到对应的控件设置相应的数据。
package com.ncsyeyy.YeyyCustomMenu;
import android.content.Context;
import android.media.Image;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
/**
* Created by yeyy on 9/17/2015.
*/
public class GvAdapter extends BaseAdapter {
private Context mContext;
private List- fileList;
// FileListAdapter的构造方法
public GvAdapter(Context c, List
- fl) {
this.mContext = c;
this.fileList = fl;
}
//获取显示的条目数量
@Override
public int getCount() {
return fileList.size();
}
//获取对象列表中对象id
@Override
public Object getItem(int position) {
return fileList.get(position);
}
//构造每一个item的view视图
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 定义位置占位符类的对象
ViewHolder viewHolder = new ViewHolder();
if (convertView==null){
// 初始化当前view的布局视图
convertView= LayoutInflater.from(mContext).inflate(R.layout.menu_item,null);
}
// 获取得到对应的控件对象
viewHolder.fileImage=(ImageView) convertView.findViewById(R.id.iv_item);
viewHolder.fileName=(TextView) convertView.findViewById(R.id.tv_item);
// 给控件对象设置相应的内容
viewHolder.fileImage.setBackgroundResource(fileList.get(position).itemImg);
viewHolder.fileName.setText(fileList.get(position).itemTitle);
return convertView;
}
// 定义内部类作为占位符组合
class ViewHolder {
ImageView fileImage;
TextView fileName;
}
}
第五:activity中功能实现。
package com.ncsyeyy.YeyyCustomMenu;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MyActivity extends Activity {
private final int ITEM_1=0;//搜索
private final int ITEM_2=1;//文件管理
private final int ITEM_3=2;//下载管理
private final int ITEM_4=3;//全屏
private final int ITEM_5=4;//网址
private final int ITEM_6=5;//书签
private final int ITEM_7=6;//加入书签
private final int ITEM_8=7;//分享
private final int ITEM_9=8;//退出
// 定义要显示在GridView中的item列表
private List- li=new ArrayList
- ();
private View view;
private AlertDialog dialog;
private GridView gv;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setDate();
setMenuView();
}
private void setDate(){
// 定义菜单
li.add(new Item(R.drawable.ss,"搜索"));
li.add(new Item(R.drawable.wjgl,"文件管理"));
li.add(new Item(R.drawable.download,"下载管理"));
li.add(new Item(R.drawable.qp,"全屏"));
li.add(new Item(R.drawable.wz,"网址"));
li.add(new Item(R.drawable.sq,"书签"));
li.add(new Item(R.drawable.jrsq,"加入书签"));
li.add(new Item(R.drawable.fx,"分享"));
li.add(new Item(R.drawable.home,"退出"));
}
// 初始化Menu的视图效果
private void setMenuView(){
// 通过view的inflate方法,加载xml文件生成view
view = View.inflate(this, R.layout.menu_layout, null);
// 定义AlertDialog,并且设置对话框的视图为之前的view
dialog = new AlertDialog.Builder(this).create();
// dialog=new AlertDialog.Builder(this).setView(view).show();
dialog.setView(view);
// 设置AlertDialog的键盘监听事件
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_MENU)
dialog.dismiss();
return false;
}
});
// 定义adapter
GvAdapter gva=new GvAdapter(this,li);
// 得到菜单的视图中的GridView控件
gv = (GridView) view.findViewById(R.id.menu_gv);
// 设置GridView的adapter数据源
gv.setAdapter(gva);
// 监听menu选项
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
switch (position){
case ITEM_1:
Toast.makeText(MyActivity.this,"选择了搜索",Toast.LENGTH_LONG).show();
break;
case ITEM_2:
Toast.makeText(MyActivity.this,"选择了文件管理",Toast.LENGTH_LONG).show();
break;
case ITEM_3:
Toast.makeText(MyActivity.this,"选择了下载管理",Toast.LENGTH_LONG).show();
break;
case ITEM_4:
Toast.makeText(MyActivity.this,"选择了全屏",Toast.LENGTH_LONG).show();
break;
case ITEM_5:
Toast.makeText(MyActivity.this,"选择了网址",Toast.LENGTH_LONG).show();
break;
case ITEM_6:
Toast.makeText(MyActivity.this,"选择了书签",Toast.LENGTH_LONG).show();
break;
case ITEM_7:
Toast.makeText(MyActivity.this,"选择了加入书签",Toast.LENGTH_LONG).show();
break;
case ITEM_8:
Toast.makeText(MyActivity.this,"选择了分享",Toast.LENGTH_LONG).show();
break;
case ITEM_9:
Toast.makeText(MyActivity.this,"选择了退出",Toast.LENGTH_LONG).show();
break;
}
// dialog取消
dialog.dismiss();
}
});
}
// 选项菜单建立的回调函数
@Override
public boolean onCreateOptionsMenu(Menu menu){
menu.add("menu");
return super.onCreateOptionsMenu(menu);
}
// 选项菜单打开的回调函数
@Override
public boolean onMenuOpened(int featureId,Menu menu){
// 如果dialog为空,就初始化菜单,否则显示菜单
if (dialog==null){
dialog=new AlertDialog.Builder(this).setView(view).show();
}else {
dialog.show();
}
return false;
}
}
PopupMenu效果:
可以在任何的view上显示,而且会根据view位置显示菜单的效果。
文本提示框
YeyyPopupMenu
发送邮件
阅读邮件
删除邮件
package com.ncsyeyy.YeyyPopupMenu;
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.view.View.OnClickListener;
import android.widget.Toast;
public class MyActivity extends Activity {
private TextView tv;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
setListener();
}
private void findView(){
tv = (TextView) findViewById(R.id.tv);
}
private void setListener(){
tv.setOnClickListener(myListener);
}
OnClickListener myListener=new OnClickListener() {
@Override
public void onClick(View v) {
// 定义popupMenu对象
PopupMenu popupMenu=new PopupMenu(MyActivity.this,v);
// 设置popupMenu对象布局
popupMenu.getMenuInflater().inflate(R.menu.main_menu,popupMenu.getMenu());
// 设置popupMenu对象的单击事件
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(getBaseContext(),"你选择了:"+item.getTitle(),Toast.LENGTH_LONG).show();
return true;
}
});
// 显示popupMenu菜单
popupMenu.show();
}
};
}
popupMenu效果可以弹出菜单
popupWindow效果,弹出交互界面,弹出登录框
定义的弹出窗口的布局文件
package com.nesyeyy.YeyyPopupWindow;
import android.app.ActionBar;
import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.view.View.OnClickListener;
public class MyActivity extends Activity {
private TextView tv;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
setListener();
}
private void findView(){
// 得到控件对象
tv = (TextView) findViewById(R.id.tv);
}
private void setListener(){
// 设置单击监听器
tv.setOnClickListener(myListener);
}
OnClickListener myListener=new OnClickListener() {
// 单击后的OnClick回调方法
@Override
public void onClick(View v) {
// 得到LayoutInflater
LayoutInflater lif=(LayoutInflater)(MyActivity.this).
getSystemService(LAYOUT_INFLATER_SERVICE);
// 获取自定义的布局文件popup.xml的视图
View popupLayout=lif.inflate(R.layout.popup,null);
// 根据popLayout得到popWindow对象
PopupWindow popupWindow=new PopupWindow(popupLayout,
ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT);
// 设置popupWindow的背景
popupWindow.setBackgroundDrawable(new BitmapDrawable());
// 设置可获取焦点
popupWindow.setFocusable(true);
// 设置popupWindow之外,popupWindow就消失
popupWindow.setOutsideTouchable(true);
// 设定popupWindow的显示位置
popupWindow.showAtLocation(findViewById(R.id.LlMain), Gravity.CENTER,0,0);
}
};
}