android---(菜单)

来源:互联网 发布:java se6 for mac下载 编辑:程序博客网 时间:2024/05/16 09:13

1.Options menu(老式的) and action bar(新版的,在标题栏显示)

2.Context menu()

3.Popup menu(弹出菜单)

Options menu and action bar:
选项菜单的步骤
1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,当菜单第一次被打开时调用

2.调用Menu的add()方法添加菜单项(Menultem),同时可以调用Menultem的seticon()方法来为菜单设置图标,

3.当菜单项(Menultem)被选择时,覆盖Activity的onOptionsltemSelected(Menultem item)来响应事件

代码的方法添加菜单:public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    //用于创建选项菜单事件的方法,在打开界面时会被自动调用    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.       //getMenuInflater :获取一个菜单填充器       //getMenuInflater().inflate(R.menu.menu_main, menu);        //添加菜单项(组id,当前选项id,排序,menu标题)        menu.add(0,100,1,"设置游戏"); //返回的是MenuItem对象        menu.add(0,200,2,"开始游戏");        menu.add(0,300,3,"退出游戏");        return true;    }    //菜单选项的单击处理事件方法    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        switch (id){            case 100:                Toast.makeText(this,"正在打开设置游戏界面",Toast.LENGTH_SHORT).show();                break;            case 200:                Toast.makeText(this,"正在打开开始游戏界面",Toast.LENGTH_SHORT).show();                break;            case 300:                Toast.makeText(this,"退出游戏",Toast.LENGTH_SHORT).show();                break;        }        return super.onOptionsItemSelected(item);    }}
men.xml:配置的方法添加菜单<menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    tools:context=".MainActivity">//  app:showAsAction:    //never:当有图片时,只显示文字    //ifRoom:显示图片,而不显法文字    //always:在标题栏中显示    <item android:id="@+id/game_set"        android:title="游戏设置"        android:orderInCategory="100"        app:showAsAction="ifRoom"        android:icon="@android:drawable/ic_menu_set_as"        />    <item android:id="@+id/game_start"        android:title="开始游戏"        android:orderInCategory="200"        app:showAsAction="ifRoom"        android:icon="@android:drawable/ic_media_play"        />    <item android:id="@+id/game_exit"        android:title="退出游戏"        android:orderInCategory="300"        app:showAsAction="never"        android:icon="@android:drawable/ic_menu_edit"        /></menu>2.核心代码:public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    //用于创建选项菜单事件的方法,在打开界面时会被自动调用    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.       //getMenuInflater :获取一个菜单填充器       getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    //菜单选项的单击处理事件方法    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        switch (id){            case R.id.game_set:                Toast.makeText(this,"正在打开设置游戏界面",Toast.LENGTH_SHORT).show();                break;            case R.id.game_start:                Toast.makeText(this,"正在打开开始游戏界面",Toast.LENGTH_SHORT).show();                break;            case R.id.game_exit:                Toast.makeText(this,"退出游戏",Toast.LENGTH_SHORT).show();                break;        }        return super.onOptionsItemSelected(item);    }}

Context Menu(上下文菜单):
与上下文环境有关,思想类似windows中的右键单击的快捷菜单,操作时需要长时间按住某个东东不放。
步骤:
1.覆盖Activity的onCreateContextMenu(Menu menu)方法,调用Menu的add()方法添加菜单项(Menultem)

2.覆盖Activity的onContextltemSelected(Menultem item)来响应事件

3.调用register的ForContextMenu()方法来为视图注册上下文菜单

menu.xml:<menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    tools:context=".MainActivity"    >    <item android:id="@+id/red"        android:title="红色"        android:orderInCategory="100"        />    <item android:id="@+id/blue"        android:title="蓝色"        android:orderInCategory="200"        />    <item android:id="@+id/green"        android:title="绿色"        android:orderInCategory="300"        /></menu>activity.xml <TextView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:text="长按我设置背影颜色"        android:id="@+id/textView"        android:gravity="center"        />核心代码:public class MainActivity extends AppCompatActivity {    private TextView textView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);      textView = (TextView)findViewById(R.id.textView);      //注册上下文菜单到 textView组件上      registerForContextMenu(textView);    }    //创建上下文菜单的事件方法    @Override    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {        super.onCreateContextMenu(menu, v, menuInfo);        //将这个菜单配置文件添加到菜单项中        getMenuInflater().inflate(R.menu.menu_main,menu);    }    //上下文 菜单的单击事件    @Override    public boolean onContextItemSelected(MenuItem item) {        switch (item.getItemId()){            case R.id.red:                textView.setBackgroundColor(Color.RED);                break;            case R.id.green:                textView.setBackgroundColor(Color.GREEN);                break;            case R.id.blue:                textView.setBackgroundColor(Color.BLUE);                break;        }        return super.onContextItemSelected(item);    }}

Popup Menu:
弹出式菜单是停靠在一个View 上的一个模式菜单。如果View对象下方有空间,那么弹出菜单将显示在停靠对象的下方,否则会显示在上方。版本11以上。

menu.xml:<menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">   <item android:id="@+id/S"    android:title="S"    android:orderInCategory="100"    />    <item android:id="@+id/M"        android:title="M"        android:orderInCategory="200"        />    <item android:id="@+id/L"        android:title="L"        android:orderInCategory="300"        /><!--<group></group>:可以将菜单放在一组中可以写多级子菜单    <item>        <menu>            <item>            </item>        </menu>    </item>    --></menu>activity.xml:  <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/button_select"        android:text="请选择型号"        android:onClick="typeSize"        />public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener {    private Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button = (Button) findViewById(R.id.button_select);    }    //d按扭单击事件    public void typeSize(View v){        //创建组件        PopupMenu popupMenu = new PopupMenu(this,v);        //创建菜单填充容器        MenuInflater inflater = popupMenu.getMenuInflater();        //填充        inflater.inflate(R.menu.menu_main,popupMenu.getMenu());        //监听菜单单击事件        popupMenu.setOnMenuItemClickListener(this);        //显示        popupMenu.show();    }    @Override    public boolean onMenuItemClick(MenuItem item) {        switch (item.getItemId()){            case R.id.L:                Toast.makeText(this,"你选择了L号",Toast.LENGTH_SHORT).show();                break;            case R.id.M:                Toast.makeText(this,"你选择了M号",Toast.LENGTH_SHORT).show();                break;            case  R.id.S:                Toast.makeText(this,"你选择了S号",Toast.LENGTH_SHORT).show();                break;        }        return true;    }}
0 0
原创粉丝点击