Android:Toolbar
官方文档
http://developer.android.com/intl/zh-cn/reference/android/support/v7/widget/Toolbar.html
Overview
v7下的 android.support.v7.widget.Toolbar
,与传统的ActionBar相比,ActionBar是由布局控制的不透明组件,Toolbar能够被放在内容区域的任何位置,想要使用Toolbar,则在 AppCompatActivity
中使用 setSupportActionbar()
方法则可以。
Toolbar提供了更多特性:
- navigation button:导航按钮
- logo:logo图标和描述
- title 和 subtitle:标题和子标题
- custom views:子view
- action menu:菜单
layout布局
<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.support.v7.widget.Toolbar
android:id="@+id/id_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/primary_color"
android:elevation="3dp"
android:minHeight="64dp"
tools:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</RelativeLayout>
android:elevation
:表示阴影,在material design中View的位置由x,y确定,而现在新增了z轴方向,z的值就是view的高度(elevation),高度决定了阴影。tools:popupTheme
:用于设置Toolbar的主题,新版本22.1.x中,AppCompat 允许对 Toolbar 使用android:theme代替tool:theme,它会自动继承父视图的theme ,并且兼容所有APIv11以上的设备。ThemeOverlay
:Android 5.0引入一个全新的特性,允许你对view设置theme,这种设置会影响控件及其包含的子控件。使用AppCompat v22.1.x 后,也可以给你 layout 里的任意视图设置主题。该种实现主要是通过ContextThemeWrapper
(API v1)类包裹(wrap)了context,也就是你的Activity,通过覆盖(overlay)一个新的主题在当前Context的主题之上。这就是ThemeOverlay的命名吧。
Manifest Theme
因为使用了Toolbar替换我们的ActionBar,所以我们需要设置我们的应用的Theme:
<style name="AppTheme" parent="AppTheme.Parent" />
<style name="AppTheme.Parent" parent="Theme.AppCompat">
<!--设置让toolbar重叠在Actionbar上-->
<item name="android:windowActionModeOverlay">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="windowActionBarOverlay">true</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
在我们的AndroidManifest.xml中为 application
或 activity
指定 android:theme="@style/AppTheme"
Java
public class MainActivity extends AppCompatActivity {
private Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mToolbar = (Toolbar) findViewById(R.id.id_toolbar);
if(mToolbar != null){
setSupportActionBar(mToolbar);
}
}
}
相关的类
-
class Toolbar.LayoutParams
- Toolbar子view的布局信息 interface Toolbar.OnMenuItemClickListener
- 用于设置菜单按钮点击的事件监听器
相关方法
- 添加Menu:
inflateMenu(int)
传入R.menu.menu_main菜单文件id参数,能够生成对应的菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
<item
android:id="@+id/action_exit"
android:orderInCategory="100"
android:title="@string/action_exit"
app:showAsAction="never" />
</menu>
设置按钮的响应事件:
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
int id = menuItem.getItemId();
if (id == R.id.action_settings) {
} else if(id == R.id.action_exit) {
finishActivty();
}
return false;
}
});
}
- 添加返回按钮:
setDisplayHomeAsUpEnabled(boolean)
//添加返回按钮
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//返回按钮添加点击响应时间
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});