ActionBar现在称为App Bar是一个标准的导航元素,组成:
应用图标,返回导航键导向逻辑父类,应用或者活动标题,持续的导航(包括抽屉)
基本
一般的话除非特别指定,只包含有一个标题
改变标题
标题是由AndroidManifest文件进行管理的,在activity的节点内,使用label标签,另外application节点内也可以设置,设置的值为自动的标题在没有为活动指定标签时自动采用这个标题
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="com.codepath.example.simpleapp.FirstActivity"
android:label="@string/activity_name" >
</activity>
</application>
可以修改android:label/android:icon
来修改标题和图标,也可以调用getSupportActionBar来获得引用动态修改相关的属性
ActionBar actionBar = getSupportActionBar(); // or getActionBar();
getSupportActionBar().setTitle("My new title"); // set the top title
String title = actionBar.getTitle().toString(); // get the title
actionBar.hide(); // or even hide the actionbar
展示图标
android5.0不鼓励在actionbar展示图标,虽然可以通过代码加上:
getSupportActionBar().setDisplayShowHomeEnabled(true);//是否允许展示logo或者icon
getSupportActionBar().setLogo(R.mipmap.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);//展示logo而不是图标,logo更为清晰细腻
动作项
当你想向ActionBar添加基本动作时,可以加载在上下文菜单中,如果特别的指定的话他们就会出现在顶部右部。
活动从onCreateOptionsMenu
中提取创造actionbar
public class MainActivity extends AppCompatActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//记载菜单,加载项 adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
我们需要新建一个布局res/menu/menu_main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/miCompose"
android:icon="@drawable/ic_compose"
app:showAsAction="ifRoom"
android:title="Compose">
</item>
<item
android:id="@+id/miProfile"
android:icon="@drawable/ic_profile"
app:showAsAction="ifRoom|withText"
android:title="Profile">
</item>
</menu>
应该记住xmlns:app
命名空间支持了showAction
的操作,ifRoom表明这个选项需要直接作为一个图标出现在actionbar上,如果没有空间的话就会出现动作溢出,withText表明文本将和图标一起出现。
处理点击事件
使用android:onClick="onComposeAction" 然后定义onComposeAction方法。
方法二:重写onOptionsItemSelected()
对于传递的MenuItem项可以使用getItemId方法来识别,然后进行相应的操作。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.miCompose:
composeMessage();
return true;
case R.id.miProfile:
showProfileView();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
理解ToolBar
在API21开始引进,可以作为ActionBar的替代者,它被认为是一个ViewGroup
可以被放置在布局中的任何位置,而且相对于ActionBar外观更同意定制,具有很好的兼容性,存在于android.support.v7.widget.ToolBar
类中