Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 ,Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来取代之前的 Actionbar 。
首先来看toolbar的布局文件
layout_toolbar.xml
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize">
android.support.v7.widget.Toolbar>
MainActivity代码:
public class MainActivity extends AppCompatActivity implements {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("toolbar");
toolbar.setTitleTextColor(Color.parseColor("#ffffff"));
// 设置toolbar支持actionbar
setSupportActionBar(toolbar);
// toolbar.setNavigationIcon(R.drawable.ab_android);//设置导航按钮图标写在 setSupportActionBar后面才有用
getSupportActionBar().setDisplayHomeAsUpEnabled(true);//会显示默认的导航按钮
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//这里写导航按钮点击处理的时间
// onBackPressed();
}
});
}
}
上面已经是一个简单的toolbar了 ,作为一个完整的toolbar我们当然要给他加入的menu
首先是menu的布局在
注意布局是在res目录下的menu目录(没有的话 new-Android resources directory-resources type 选择menu)
在里面写布局文件toolbar_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/ab_search"
android:orderInCategory="80"
android:title="action_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="ifRoom" />
<item
android:title="action_personl"
android:id="@+id/action_share"
android:icon="@mipmap/home"
android:orderInCategory="90"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="action_settings"
app:showAsAction="never" />
menu>
MainActivity:
public class MainActivity extends AppCompatActivity implements {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Home11");
toolbar.setTitleTextColor(Color.parseColor("#ffffff"));
// 设置toolbar支持actionbar
setSupportActionBar(toolbar);
// toolbar.setNavigationIcon(R.drawable.ab_android);//设置导航按钮图标写在 setSupportActionBar后面才有用
getSupportActionBar().setDisplayHomeAsUpEnabled(true);//会显示默认的导航按钮
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//这里写导航按钮点击处理的时间
// onBackPressed();
}
});
toolbar.setOnMenuItemClickListener(onMenuItemClick);
}
/**
* toolbar条目的点击事件
*/
Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.ab_search:
break;
//......
}
return true;
}
};
///记得这里要先inflate memu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_menu, menu);
return super.onCreateOptionsMenu(menu);
}
}
DrawerLayout是类似于开源框架slidingMenu的谷歌原生控件他如果配合toolbar一起使用十分的方便
layout下的布局文件drawerlayout.xml
<android.support.v4.widget.DrawerLayout 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"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:openDrawer="start">
<RelativeLayout
android:layout_width="match_parent"
android:background="#00c7c0"
android:layout_height="match_parent">
<LinearLayout
android:layout_marginTop="@dimen/base10dp"
android:id="@+id/ll_left"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android.support.v4.widget.DrawerLayout>
main布局,这里直接引用上面的toolbar.xml
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/toolbar" />
<include layout="@layout/drawerlayout" />
LinearLayout>
MainActivity
public class MainActivity extends AppCompatActivity implements {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Home11");
toolbar.setTitleTextColor(Color.parseColor("#ffffff"));
// 设置toolbar支持actionbar
setSupportActionBar(toolbar);
// toolbar.setNavigationIcon(R.drawable.ab_android);//设置导航按钮图标写
getSupportActionBar().setDisplayHomeAsUpEnabled(true);//会显示默认的导航按钮 是一个小箭头
ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this,
drawerLayout,
toolbar,
R.string.drawer_open,
R.string.drawer_close);
mDrawerToggle.syncState();
// mDrawerLayout.addDrawerListener(mDrawerToggle);加上这句会有一个小的点击翻转动画
关于侧滑面板点击跳转卡顿的解决
原因:侧滑面板正在关闭的动画和屏幕跳转的动作冲突
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
//Log.i("slideOffset", "slideOffset=" + slideOffset);
//slideOffset = 面板目前展开宽 / 完全展开宽度
if (slideOffset == 0 && intent != null) {
//当侧滑面板完全关闭以后执行.....
// startActivity(intent);
// intent = null;
}
}
@Override
public void onDrawerOpened(View drawerView) {
}
@Override
public void onDrawerClosed(View drawerView) {
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
}
Android Design Support Library里的新控件,用于打造填充的侧滑面板的内容
有人写了一个不错的文章 请参考
http://blog.csdn.net/lmj623565791/article/details/46405409