Android 各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果,PopupMenu,PopupWindow

Android 各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果

菜单弹出效果

手机屏幕有限,经常使用,方便显示更多功能。

在android 4.0之前对于系统的菜单可以显示选项图片,
但是在4.0之后通常无法直接显示菜单图片了。除非自己定义item



    

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;
    }
}

Android 各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果,PopupMenu,PopupWindow_第1张图片


菜单新建文件,保存文件,打开文件

菜单具有层级效果



    

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 各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果,PopupMenu,PopupWindow_第2张图片       Android 各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果,PopupMenu,PopupWindow_第3张图片        Android 各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果,PopupMenu,PopupWindow_第4张图片


文本框的复制粘贴全选菜单效果


长按复制粘贴全选文字
android中的上下文菜单类似于Windows中的鼠标右键,针对不同的控件显示不同的菜单选项。
最主要的应用就是在ListView中了,通过长按一个item,可以做修改删除的功能



    
    


Java代码
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);
    }
}

Android 各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果,PopupMenu,PopupWindow_第5张图片


自定义菜单:图片加文字
思路:
1.item布局文件
2.菜单容器GridView
3.javaBean 实体对象类,构造函数
4.adapter适配item,为自定义Menu中的GridView来使用,在getView方法在此方法中通过LayoutInflater类,
加载之前的menu_item的布局作为当前的视图布局,然后得到对应的控件设置相应的数据。
5.activity中功能实现。

第一:自定义item布局文件



    
    



第二:存放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;
    }
}

Android 各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果,PopupMenu,PopupWindow_第6张图片


PopupMenu效果:
可以在任何的view上显示,而且会根据view位置显示菜单的效果。


文本提示框



    

定义的菜单布局文件


    
    
    

定义文字常量


    YeyyPopupMenu
    发送邮件
    阅读邮件
    删除邮件

功能实现Java代码:
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();


        }
    };
}

Android 各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果,PopupMenu,PopupWindow_第7张图片


popupMenu效果可以弹出菜单
popupWindow效果,弹出交互界面,弹出登录框

定义的弹出窗口的布局文件





    
    
    

显示提示信息的文本框


    


Java布局文件
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);
        }
    };
}

扩展:
Android中view,activity,window概念的区别
view:指的是控件和视图,包括ViewGroup
activity:得到页面布局,产生对应的窗口,及用户的动作接收
window:是真正用户看到的最顶层的界面效果。
对于看到的界面都是Activity,其实是不准确的,确切的说我们看到的都是window
Android 各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果,PopupMenu,PopupWindow_第8张图片


源码地址:http://download.csdn.net/detail/csdnyuandaimaxuexi/9158143








你可能感兴趣的:(Android,各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴全选菜单效果,自定义图片文字菜单效果,Android学习)