参考:Toolbar样式
- layout activity_main.xml
<?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"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.example.toolbar.MainActivity">
<!--默认使用系统ActionBar的高度-->
<!--android:layout_height="?attr/actionBarSize"-->
<!--设置toolbar背景色(引用系统的ActionBar背景色)-->
<!--android:background="?attr/colorPrimary"-->
<!--除了宽高外,其他属性最好使用自定义命名空间来设置,如app:logo等-->
<!--设置溢出菜单样式-->
<!--app:popupTheme-->
<!--@style/ThemeOverlay.Appcompat.Dark 黑底白字-->
<!--@style/ThemeOverlay.Appcompat.Light 白底黑字-->
<!--设置标题栏样式-->
<!--app:theme-->
<!--@style/ThemeOverlay.Appcompat.Dark 黑底白字-->
<!--@style/ThemeOverlay.Appcompat.Light 白底黑字-->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:logo="@mipmap/ic_launcher"
app:title="title"
app:subtitle="subtitle"
app:navigationIcon="@mipmap/ic_launcher"
app:theme="@style/AppTheme"
app:popupTheme="@style/CustomStyle">
</android.support.v7.widget.Toolbar>
<!--toolbar是继承自ViewGroup,所以可以作为一个容器使用,在里面设置控件-->
<!--<android.support.v7.widget.Toolbar-->
<!--android:id="@+id/toolbar"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="?attr/actionBarSize"-->
<!--android:background="?attr/colorPrimary">-->
<!--<RelativeLayout-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent">-->
<!--<ImageView-->
<!--android:id="@+id/navigation"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:background="@mipmap/ic_launcher"/>-->
<!--<ImageView-->
<!--android:id="@+id/menu"-->
<!--android:layout_alignParentRight="true"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:background="@mipmap/ic_launcher"/>-->
<!--<EditText-->
<!--android:id="@+id/edittext"-->
<!--android:layout_toRightOf="@id/navigation"-->
<!--android:layout_toLeftOf="@id/menu"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent" />-->
<!--</RelativeLayout>-->
<!--</android.support.v7.widget.Toolbar>-->
</RelativeLayout>
- values styles.xml
<resources>
<!--系统默认的样式(黑色主题)-->
<!--<style name="AppTheme" parent="Theme.AppCompat.DarkActionBar">-->
<!--(白色主题)-->
<!--<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">-->
<!--溢出菜单样式,在app:popupTheme中调用-->
<style name="CustomStyle">
<!--该样式设置溢出菜单弹出的位置-->
<item name="actionOverflowMenuStyle">@style/OverflowMenuStyle</item>
</style>
<style name="OverflowMenuStyle" parent="@style/Widget.AppCompat.Light.PopupMenu.Overflow">
<item name="overlapAnchor">false</item>
<item name="android:dropDownWidth">wrap_content</item>
<item name="android:paddingRight">5dp</item>
<item name="android:popupBackground">?attr/colorPrimary</item>
<item name="android:dropDownVerticalOffset">10dip</item>
<item name="android:dropDownHorizontalOffset">0dip</item>
<!--设置toolbar溢出菜单图标颜色(三个竖点)[同时会更改subtitle的颜色]-->
<!--不单独在xml中的app:theme或android:theme中引用OverflowMenuStyle样式,该属性不会起作用-->
<item name="android:textColorSecondary">@android:color/holo_red_dark</item>
</style>
<style name="OverFlow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
<item name="android:src">@mipmap/ic_launcher</item>
</style>
<!--标题栏样式,在app:theme中调用-->
<!-- Theme.AppCompat.Light.NoActionBar (不使用系统的ActionBar)-->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!--toolbar背景色-->
<item name="colorPrimary">@color/colorPrimary</item>
<!--状态栏背景色-->
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<!--设置溢出菜单窗体的条目文本颜色和toolbar标题颜色-->
<item name="android:textColorPrimary">@color/colorAccent</item>
<!--设置溢出菜单图标-->
<item name="actionOverflowButtonStyle">@style/OverFlow</item>
<!--Activity窗口的颜色-->
<!--<item name="android:windowBackground">@color/material_blue_grey_800</item>-->
<!--按钮选中或者点击获得焦点后的颜色-->
<!--<item name="colorAccent">#00ff00</item>-->
<!--和 colorAccent相反,正常状态下按钮的颜色-->
<!--<item name="colorControlNormal">#ff0000</item>-->
<!--Button按钮正常状态颜色-->
<!--<item name="colorButtonNormal">@color/accent_material_light</item>-->
<!--EditText 输入框中字体的颜色-->
<!--<item name="editTextColor">@android:color/white</item>-->
</style>
</resources>
- values-21 styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!--底部导航栏底色,在API 21后才能使用-->
<item name="android:navigationBarColor">@color/colorPrimary</item>
</style>
</resources>
- menu toolbar_menu.xml
<?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">
<!--app:showAsAction属性值说明-->
<!--always:使菜单项一直显示在ToolBar上-->
<!--ifRoom:如果有足够的空间,这个值会使菜单项显示在ToolBar上-->
<!--never:使菜单项永远都不出现在ToolBar上,在溢出菜单的子项中显示-->
<!--withText:使菜单项和它的图标,菜单文本一起显示-->
<!--android:orderInCategory-->
<!--ActionBar里每个item的优先级,值越大优先级越低,ActionBar空间不足会以溢出菜单子项显示-->
<item
android:id="@+id/action_search"
android:title="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="80"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_notification"
android:title="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="90"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_setting"
android:title="设置"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="100"
app:showAsAction="never"/>
<item
android:id="@+id/action_about"
android:title="关于"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="101"
app:showAsAction="never"/>
</menu>
- MainActivity.java
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);
//在style中没有引用Theme.AppCompat.Light.NoActionBar会直接报错
setSupportActionBar(toolbar);
//隐藏系统默认的title
// getSupportActionBar().setDisplayShowTitleEnabled(false);
//必须在setSupportActionBar之后才能调用
// toolbar.setTitle("主标题");
// toolbar.setSubtitle("副标题");
// toolbar.setLogo(R.mipmap.ic_launcher);
// toolbar.setNavigationIcon(android.R.drawable.ic_input_delete);
//点击事件必须在setSupportActionBar之后才能调用
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"navigation was clicked",Toast.LENGTH_SHORT).show();
}
});
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.action_search:
Toast.makeText(MainActivity.this,"action search",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_setting:
Toast.makeText(MainActivity.this,"action setting",Toast.LENGTH_SHORT).show();
break;
case R.id.action_about:
Toast.makeText(MainActivity.this,"action about",Toast.LENGTH_SHORT).show();
break;
}
return false;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_menu,menu);
return super.onCreateOptionsMenu(menu);
}
/**
* 在该方法下调用以下代码可以让溢出菜单的条目显示图标
* @param menu
* @return
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(menu!=null){
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
}
}
}
return super.onPrepareOptionsMenu(menu);
}
}