例子
ActionBar可以使用onCreateOptionsMenu,和一个menu文件关联起来,也可以用setCustomView和一个布局关联,并且,以上2种方式是可以共存的
方式1我们称为menu方式,方式2我们称为customview方式。
对于menu方式来说,Actionbar上的每个按钮实际上都是一个菜单项MenuItem
对于menu式
代码如下
protected int getMenuRes() {
return R.menu.menu_layout;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(getMenuRes(), menu);
return super.onCreateOptionsMenu(menu);
}
@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();
//noinspection SimplifiableIfStatement
if (id == R.id.broken) {
Toast.makeText(this,"broken",Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
对于customview式,代码如下
protected void initActionBar() {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setCustomView(R.layout.activity_action_bar_custom_view);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
}
}
一般在oncreate里面调用
如图右边是menu方式,左边黄色部分是customview方式
先调的onCreate后调的onCreateOptionsMenu
module:ActionbarDemo5
activity_action_bar_custom_view.xml代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_view_right_layout"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#ffff00"
android:orientation="horizontal">
<ImageView
android:background="#ff0000"
android:layout_marginRight="10dp"
android:id="@+id/comment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/comment" />
<ImageView
android:background="#ff00ff"
android:id="@+id/qrcode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/qrcode" />
<ImageView
android:background="#0000ff"
android:layout_marginRight="20dp"
android:id="@+id/zone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/zone" />
</LinearLayout>
这里 android:layout_gravity="right",所以这些ImageView都在右边,如果改为left,那么这些ImageView就会跑到左边,但是肯定在标题的右边,如下所示,这里为了显示的清楚,只采用了一个图标
注意
1、actionBar.setCustomView(View view, LayoutParams layoutParams)
第一个参数view一般是LinearLayout,如果用RelativeLayout会导致activity的标题无法显示,参考module:actionbaraddview
2、actionbar从左到右依次显示icon,标题,customview,menu图标