好久没写过界面了,最近用最新的支援库,官方建议AppBar+ToolBar代替原ActionBar。然后翻了一下怎么往ToolBar上创建按钮,翻了半天没一个可以。。。最后发现把onCreateOptionsMenu丢了(网上的大爷们这么默契,全部都把这部分代码忽略掉真的好吗)。附上ToolBar上创建菜单的方法。
Activity中写入:
(XML方式)
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_check, menu); return true; }
123456 | @Overridepublic boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_check, menu); return true;} |
---|
menu_check.xml:
<?xml version="1.0" encoding="utf-8"?> <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=".CheckActivity"> <item android:id="@+id/action_controller" android:title="@string/start" android:orderInCategory="90" app:showAsAction="always|withText" /> </menu>
1234567891011 | <?xml version="1.0" encoding="utf-8"?><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=".CheckActivity"> <item android:id="@+id/action_controller" android:title="@string/start" android:orderInCategory="90" app:showAsAction="always|withText" /></menu> |
---|
或:
(代码方式)
public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, Menu.FIRST + 1, 1, "设置") .setIcon( android.R.drawable.ic_menu_help) .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return true; }
1234567 | public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, Menu.FIRST + 1, 1, "设置") .setIcon( android.R.drawable.ic_menu_help) .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return true;} |
---|
菜单会显示在ToolBar右上角。setShowAsAction相当xml中的app:showAsAction。withText作用是把菜单的文字显示出来,如果想仅显示文字,不设置icon即可。
然后在onOptionsItemSelected中处理点击事件:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.action_controller: // XML方式 Toast.makeText(MainActivity.this, "设置1", Toast.LENGTH_SHORT).show(); break; case Menu.FIRST + 1: // Java代码方式,仅作示例,两种方法不应混用 Toast.makeText(MainActivity.this, "设置2", Toast.LENGTH_SHORT).show(); break; } return super.onOptionsItemSelected(item); }
1234567891011121314 | @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.action_controller: // XML方式 Toast.makeText(MainActivity.this, "设置1", Toast.LENGTH_SHORT).show(); break; case Menu.FIRST + 1: // Java代码方式,仅作示例,两种方法不应混用 Toast.makeText(MainActivity.this, "设置2", Toast.LENGTH_SHORT).show(); break; } return super.onOptionsItemSelected(item); } |
---|