一.设置ToolBar
- 在app下的gradle添加,v7包的支持,参考链接
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
//compile dep
compile com.android.support:appcompat-v7:24.2.1//V7包
}
- 将Activity继承AppCompatActivity.
public class ToolbarActivity extends AppCompatActivity {
// ...
}
3.在manifest.xml文件中,添加主题
<application
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
/>
4.在布局文件中添加.toolbar控件
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
5.在toobarActivity中添加代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
}
二、添加toolbar的Actions
- AppBar允许你添加button操作一些动作,资源
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- "Mark Favorite", should appear as action button if possible -->
<item
android:id="@+id/action_favorite"
android:icon="@drawable/ic_favorite_black_48dp"
android:title="@string/action_favorite"
app:showAsAction="ifRoom"/>
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
app:showAsAction="never"/>
</menu>
- app: showAsAction 显示在Appbar上的状态.
ifroom:代表如果有足够的控件就显示在bar上,没有的话,就则点到menu的多项选择按钮中。
never:表示不显示在appbar上,折叠到menu的多项选择按钮中。
2.Action Buttons的回调事件处理,onOptionsItemSelected()
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.example_menu, menu);
return true;
}
- 给Menu设置Action操作
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
Toast.makeText(this, "setting", Toast.LENGTH_SHORT).show();
return true;
case R.id.action_favorite:
Toast.makeText(this, "favorite", Toast.LENGTH_SHORT).show();
return true;
default:
// 交给父类处理
return super.onOptionsItemSelected(item);
}
}
三、添加返回按钮
声明父类Activity
- 表示次当前Activity的父类Activity是谁,返回的时候为该属性声明的Activity.
<activity
android:name=".ToolbarActivity"
android:parentActivityName=".MainActivity">
<!-- 用于兼容4.0及其一下的版本 -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
四、给ActionBar添加其他的通用功能
介绍
- SearchView
- ShareActionProvider,分享信息到其他app
- 定义自己的action provider
添加ActionView
SearchView
- 在Menu.xml中添加一个Item
<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" />
collapseActionView:表示点击的时候,会充满真个ActionBar
actionViewClass: v7的控件,也可以自己编写控件.
- 在这里onCreateOptionsMenu添加UI显示控件。
@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);
}
Re
- 添加扩展监听
- 当这个Bar的item元素有一个
collapseActionView
属性,这个App会首先展示这个定义的icon,当我们点击后会触发.
onOptionsItemSelected()。如果子类重载了他,你的重载方法必须实现, super.onOptionsItemSelected()才行。- 当你Appbar出一扩展或则搜索状态时,你要做一些事情,你可以定义一个MenuItem.onActionExpandLisener,并且通过
setOnActionExpandListener()
设置.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.options, menu);
// ...
// Define the listener
OnActionExpandListener expandListener = new OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do something when action item collapses
return true; // Return true to collapse action view
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Do something when expanded
return true; // Return true to expand action view
}
};
// Get the MenuItem for the action item
MenuItem actionMenuItem = menu.findItem(R.id.myActionItem);
// Assign the listener to that action item
MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener);
// Any other things you have to do when creating the options menu…
return true;
}
添加一个Action Provider
在menu.xml中添加下面的代码,添加一个属性actionProviderClass
,并且添加一个全名.可以允许你的App分享数据到其他App中.
<item android:id="@+id/action_share"
android:title="@string/share"
app:showAsAction="ifRoom"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
一般,不需要我们定义icon,他有内置的图片。创建自定义Provider查看链接ActionProvider