要点:共三部分
1.Adding and Handling Actions(添加和处理操作)
2.添加 Up Action
3.Action Views and Action Providers
第一部分:Adding and Handling Actions(添加和处理操作)
1.Add Action Buttons(添加操作按钮)为了在action bar添加行为, 在res/menu/ 目录下创建一个新的XML
代码(XML):
<span style="font-size:18px;"><?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">
<item
android:id="@+id/action_favorite"
android:icon="@drawable/ic_heart"
android:title="love"
app:showAsAction="ifRoom">
</item>
<item
android:id="@+id/action_settings"
android:title="settings"
app:showAsAction="never">
</item>
</menu></span>
2.Respond to Actions 对添加的行为进行反应
<span style="font-size:18px;"> @Override
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.action_favorite:
Toast.makeText(this,"You have added it to your favourite",Toast.LENGTH_SHORT).show();
case R.id.action_settings:
Toast.makeText(this,"You are choosing settings",Toast.LENGTH_SHORT).show();
default:return super.onOptionsItemSelected(item);
}
}</span>
效果图:
第二部分:添加 Up Action
为了让你的APP更容易返回主界面,最简单的就是在app bar上提供UP按钮
1.声明Parent Activity
在manifest设置android:parentActivityName(introduced in Android 4.1)
为了让更多支持更多老版本Android的设备,定义<meta-data>其中name="android.support.PARENT_ACTIVITY"
value是Parent Activity的名字
代码展示:
<span style="font-size:18px;"> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MyChildActivity"
android:label="@string/title_activity_child"
android:parentActivityName=".MainActivity"></activity>
</application></span>
2.实现Up Button
调用app bar的setDisplayHomeAsUpEnabled()方法
代码如下:
public class MyChildActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_child);
Toolbar myChildToolBar = (Toolbar) findViewById(R.id.my_child_toolBar);
setSupportActionBar(myChildToolBar);
ActionBar ab=getSupportActionBar();
ab.setDisplayHomeAsUpEnabled(true);
}
}
效果图:
第三部分:Action Views and Action Providers
Action View是一种可以是你的app bar拥有更多功能的行为(例如一个搜索的行为视图可以在不改变activities or fragments下使用户在app bar输入搜索文本)
Action Provider 是一种拥有专属布局的行为,这种行为呈现给用户的是按钮或者菜单项,但当用户点击时,action provider会以你想定义的任何方式控制这种行为的动作。
例如:SearchView可以用作Action View用来输入查询内容;ShareActionProvider可以用作Action Provider 实现与其他App分享信息
1.添加Action View
用<item>创立一个菜单项 actionViewClass: 执行这个行为的组件的类(The class of a widget that implements the action)
actionLayout: 描述行为元素的布局资源(A layout resource describing the action's components)
代码(XML):
<span style="font-size:18px;"><item android:id="@+id/action_search"
android:title="@string/action_search"
android:icon="@drawable/ic_search"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView" /></span>
其中showAsAction中ifRoom指只要app bar有空间就独立放在app bar上,若没有空间就放在溢出菜单中collapseActionView指当用户不与这个行为交互时,在app bar 上应显示是一个图片或在溢出菜单中是个菜单项
代码(Java):
<span style="font-size:18px;">@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_activity_actions, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView =
(SearchView) MenuItemCompat.getActionView(searchItem);
// Configure the search info and add any event listeners...
return super.onCreateOptionsMenu(menu);
}</span>
调用静态方法getActionView()来得到action view对象实例
2.添加Action Provider
代码(XML):
<item android:id="@+id/action_share"
app:showAsAction="ifRoom"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
效果图:<img src="https://img-blog.youkuaiyun.com/20151206221533114?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="300" height="500" alt="" />