Toolbar包含ActionBar,是一个view。通常在activity的顶端,用于标题栏等。
在使用Toolbar时,要将activity中原有的ActionBar隐藏掉,否则原有的actionBar和Toolbar会同时出现在顶端。
隐藏ActionBar:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"/>
使用Toolbar,布局文件如下:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<Button
android:id="@+id/nav_button"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:background="@drawable/ic_home"/>
<!--城市名-->
<TextView
android:id="@+id/title_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#fff"
android:textSize="20sp"/>
</android.support.v7.widget.Toolbar>
在该布局文件中,设置了一个Button,用于显示菜单,其实可以使用toolbar中默认的返回键,而不必手动添加一个Button。添加了一个TextView,用于动态显示标题的信息。
Toolbar中右侧最多设置三个action:
在menu/toolbar.xml中列出action:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/settings"
android:icon="@drawable/ic_settings"
android:title="Settings"
app:showAsAction="never"/>
</menu>
由于在项目中只用到了一个action,因此只有一个<item>
app:showAsAction="never"表示永远不显示在toolbar中,ifRoom,表示有空间就显示。“always”表示永远显示在toolbar中
如果要在toolbar中显示action,要通过
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.toolbar, menu);
return true;
}
设置action的布局,否则不会显示。
而action对应的操作则需要函数:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.settings:{
AlertDialog.Builder build = new AlertDialog.Builder(this);
build.setTitle("自动更新?");
build.setCancelable(true);
build.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
//设置内容区
final String [] items = {"自动更新","取消自动更新"};
build.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case 0:
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();
editor.putString("autoUpdate", "Update");
editor.apply();
Toast.makeText(getApplicationContext(), "自动更新", Toast.LENGTH_LONG).show();
dialog.dismiss();
break;
case 1:
SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();
edit.putString("autoUpdate", "UnUpdate");
edit.apply();
Toast.makeText(getApplicationContext(), "取消自动更新", Toast.LENGTH_LONG).show();
dialog.dismiss();
break;
}
}
});
AlertDialog dialog = build.create();
dialog.show();
break;
}
}
return true;
}
这里设置了当点击settings时打开一个dialog,进行相关的设置。