标签(空格分隔): android
运行效果:
一、四个需要注意的地方:
-
我们在使用Toolbar时候隐藏系统原来的导航栏,
- 一种是给Activity设置一个NoActionBar的Theme。
- 一种是在继承AppCompatActivity中调用supportRequestWindowFeature(Window.FEATURE_NO_TITLE)
(注意:BaseActivity是继承了AppCompatActivity的,如果继承Activity的requestWindowFeature(Window.FEATURE_NO_TITLE)).
如果你想在代码修改标题和子标题的字体大小、颜色等,可以调用setTitleTextColor、setTextAppearance、setSubtitleTextColor、setSubtitleTextAppearance这些API;
自定义的View位于title、subtitle和actionmenu之间,这意味着,如果title和subtitle都在,且actionmenu选项太多的时候,留给自定义View的空间就越小
-
Toolbar和其他控件一样,很多属性设置方法即支持代码设置,也支持xml设置。
常见属性设置: toolbar:navigationIcon="@mipmap/ic_drawer_home" toolbar:logo="@mipmap/ic_launcher" toolbar:subtitle="456" toolbar:title="123">
(注意:xml设置是注意设置命名空间xmlns:toolbar="http://schemas.android.com/apk/res-auto")
二、Toolbar基础使用:
2.1 风格(sytle)
2.2 界面(layout)
2.3 程序(java)
2.1 风格(sytle)
为了之后设定方便,我们现在res/values/styles.xml里增加一个名为AppTheme.Base 的风格
styles(系统默认调用的style)
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
</style>
<!--AppTheme.Base-->
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<!--隐藏原来的Actionbar和标题-->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<!-- Customize your theme here. 设置Theme颜色-->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">#0176DA</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
styles(v19)
适配Android4.4状态栏
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
</resources>
styles(v21)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"></style>
</resources>
2.2 界面(layout)
注意在跟布局使用android:fitSystemWindows="true",不然actionbar会和状态栏重合
res/layout/layout_main 布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="@color/color_0176da"
tools:context="com.aqtc.toolbardemo.MainActivity">
<android.support.v7.widget.Toolbar xmlns:toolbar="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_0176da"
toolbar:navigationIcon="@mipmap/ic_launcher"
toolbar:title="ToolbarDemo"
toolbar:titleTextColor="#FFF" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar"
android:background="@android:color/white">
</RelativeLayout>
</RelativeLayout>
menu布局文件res/menu/menu_main:
<?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_search"
android:icon="@mipmap/ic_search"
android:title="@string/menu_search"
app:showAsAction="ifRoom" />
<item
android:id="@id/action_notification"
android:icon="@mipmap/ic_notifications"
android:title="@string/menu_notifications"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_item1"
android:title="@string/item_01"
app:showAsAction="never" />
<item
android:id="@+id/action_item2"
android:title="@string/item_02"
app:showAsAction="never" />
</menu>
app:showAsAction=" " 这个属性可接受的值有:
- always:使菜单项一直显示在ToolBar上。
- ifRoom:如果有足够的空间,这个值会使菜单项显示在ToolBar上。
- never:使菜单项永远都不出现在ToolBar上,在…(竖)的子项中显示
- withText:使菜单项和它的图标,菜单文本一起显示。
2.3 代码(activity)
2.3.1 直接通过toolbar加载menu布局文件
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar= (Toolbar) findViewById(R.id.toolbar);
// setSupportActionBar(toolbar);
toolbar.inflateMenu(R.menu.base_toolbar_menu);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"navigation",Toast.LENGTH_SHORT).show();
}
});
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.action_item1:
Toast.makeText(MainActivity.this,"action_item1",Toast.LENGTH_SHORT).show();
break;
case R.id.action_item2:
Toast.makeText(MainActivity.this,"action_item2",Toast.LENGTH_SHORT).show();
break;
case R.id.action_notification:
Toast.makeText(MainActivity.this,"action_notification",Toast.LENGTH_SHORT).show();
break;
case R.id.action_search:
Toast.makeText(MainActivity.this,"action_search",Toast.LENGTH_SHORT).show();
break;
}
return false;
}
});
}
}
2.3.2 将Toolbar转换成ActionBar加载布局文件
@Override
protected void onCreate(Bundle savedInstanceState) {
....
setSupportActionBar(mToolbar);
ActionBar mActionBar = this.getSupportActionBar();
if (mActionBar != null) {
//设置返回事件
mActionBar.setDisplayHomeAsUpEnabled(true);
}
....
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case R.id.action_item1:
Toast.makeText(MainActivity.this,"action_item1",Toast.LENGTH_SHORT).show();
break;
case R.id.action_item2:
Toast.makeText(MainActivity.this,"action_item2",Toast.LENGTH_SHORT).show();
break;
case R.id.action_notification:
Toast.makeText(MainActivity.this,"action_notification",Toast.LENGTH_SHORT).show();
break;
case R.id.action_search:
Toast.makeText(MainActivity.this,"action_search",Toast.LENGTH_SHORT).show();
break;
}
return true;
}
....