菜单及提示框

菜单有三种:
选择菜单:OptionsMenu
弹出菜单:PopupMenu
上下文菜单:ContextMenu

三种菜单在创建菜单时
共同点:,都会在各自的onCreate方法中使用getMenuInflater().inflate(resourceId,?)把,布局文件转换成一个view对像(resourceId是menu文件夹下的布局文件的名称,?是各自本身的一个属性);
不同点:不同点在于 ? OptionsMenu与ContextMenu保持默认就可以,但是PopupMenu需要利用PopupMenu的句柄来获取getMenu()方法;

OptionsMenu在重写的OnCreateOptionsMenu方法中,通过getMenuInflater().inflate(R.menu.main,menu);创建
菜单的点击事件通过重写 setOnMenuItemClickListener实现

PopupMenu不用重写方法,但是需要创建PopupMenu对象来使menu中的布局文件转换成一个view对象
PopupMenu实现后,显示的位置是在指定的控件的上方或者下方,默认是上方(如果有空间的话,否则是在下方)
PopupMenu pop = new PopupMenu(this,v) ;  v----是指定的控件
MenuInflater inflater = pop.getMenuInflater();
inflater.inflater(R.menu.main,pop.getMenu);

也可以写成:pop.getMenuInflater().inflater(R.menu.main,pop.getMenu());
pop.show();//显示菜单
pop.dismiss();关闭菜单

ContextMenu必须首先给需要设置上下文菜单的控件注册上下文菜单:通过registerForContextMenu(控件);
ContextMenu在重写的onCreateContextMenu方法中,通过getMenuInflater().inflater(R.menu.main,menu);创建一个上下文菜单;
设置点击事件,则重写OnContextItemSelected方法。


对话框:
AlertDialog ad = new AlertDialg.Builder();
自定义对话框:
需要这自己在layout中创建一个布局文件,然后通过View v = View.inflate(this,R.layout.布局文件,null);转换成一个View对象。然后通过.setView( v )去加到对话框中
列表对话框:
就是将一个适配器设置到对话框中,setAdapter();
public class MainActivity extends Activity {
     EditText etname;
     EditText etpwd  ;
    AlertDialog createDialog; // 自定义对话框
    AlertDialog singleDialog; // 单选对话框
    AlertDialog mutilDialog; // 单选对话框
    AlertDialog listDialog; // 列表对话框
    String[] fontSizeDesc = { "小号", "中号", "大号", "特大号" };
    float[] fontSize = { 10f, 20f, 30f, 40f };
    TextView tv;

    String[] hibs = { "吃", "喝", "玩", "乐" };
    boolean[] checked = { false, false, false, false };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView) findViewById(R.id.tv);
        tv.setTextSize(fontSize[1]);

        initSingleDialog(); // 初始化单选对话框

        initMutilDialog(); // 初始化多选对话框

        initListDialog(); // 初始化列表对话框

        initCreateDialogBySelf(); //初始化自定义对话框

    }

    //初始化自定义对话框
    private void initCreateDialogBySelf() {
        // 1.把一个指定的布局转成一个VIEW对象
        View view = View.inflate(this, R.layout.item_dialog_layout, null);
         etname = (EditText) view.findViewById(R.id.etname);
         etpwd = (EditText) view.findViewById(R.id.etpwd);
        createDialog = new AlertDialog.Builder(this).setTitle("请输入您的信息")
                .setView(view).setPositiveButton("确定", new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(
                                MainActivity.this,
                                etname.getText().toString() + ":"
                                        + etpwd.getText().toString(), 1).show();

                    }
                })
                .setNegativeButton("取消", new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();

                    }
                })
                .create();
    }

    // 初始化列表对话框
    private void initListDialog() {
        ArrayAdapter<String> ad = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1);
        // 可以使用适配器里自带的数据源容器
        ad.add("红色");
        ad.add("绿色");
        ad.add("灰色");
        ad.add("黄色");
        listDialog = new AlertDialog.Builder(this).setTitle("请选择字体的颜色")
        // 通过适配器来设置数据源,设置一个可选列表
                .setAdapter(ad, new OnClickListener() {

                    @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.GRAY);
                            break;
                        case 3:
                            tv.setTextColor(Color.YELLOW);
                            break;

                        }
                    }
                }).create();
    }

    // 多选对话框初始化
    private void initMutilDialog() {
        mutilDialog = new AlertDialog.Builder(this)
                .setTitle("请选择您的爱好")
                .setMultiChoiceItems(hibs, checked,
                        new OnMultiChoiceClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which, boolean isChecked) {
                                checked[which] = isChecked;
                            }
                        }).setPositiveButton("确定", new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        StringBuffer sb = new StringBuffer();
                        for (int i = 0; i < checked.length; i++) {
                            if (checked[i]) {
                                sb.append("\n" + hibs[i] + "\t");
                            }
                        }
                        tv.setText(sb.toString());

                    }
                }).setNegativeButton("取消", new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();

                    }
                }).setCancelable(false).create();
    }

    // 单选对话框
    public void singleCheck(View view) {
        singleDialog.show();
    }

    // 多选对话框
    public void mutilCheck(View view) {

        mutilDialog.show();

    }

    // 列表对话框
    public void listCheck(View view) {

        listDialog.show();
    }

    // 自定义对话框
    public void createCheck(View view) {

        etname.setText("");
        etpwd.setText("");
        createDialog.show();
    }

    // 单选对话框的初始化操作
    private void initSingleDialog() {
        singleDialog = new AlertDialog.Builder(this).setTitle("请选择字体的大小")
                .setSingleChoiceItems(fontSizeDesc, 1, new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        tv.setTextSize(fontSize[which]);
                        // Toast.makeText(MainActivity.this,
                        // fontSizeDesc[which], 1).show();
                        singleDialog.dismiss();
                    }
                }).setIcon(R.drawable.ic_launcher).create();
    }

}

你可能感兴趣的:(菜单及提示框)