关于android.support.v7.widget.Toolbar的一些认识
1,toolbar也叫appbar作用 用来代替actionbar
首先 style主题中必须影藏actionbar
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
toolbar = (Toolbar)findViewById(R.id.toolbar); toolbar.setTitle("我从草原来"); // toolbar.setSubtitle("未来为我盛开"); toolbar.setBackgroundColor(Color.parseColor("#ff0000")); toolbar.setLogo(R.drawable.ab); setSupportActionBar(toolbar);//此方法只有AppCompatActivity才有 toolbar.setNavigationIcon(R.drawable.ab_android); // 这边要留意的是setNavigationIcon需要放在 setSupportActionBar之后才会生效。
<
android.support.v7.widget.Toolbar
android :id= "@+id/toolbar"
android :layout_width= "match_parent"
android :background= "?attr/colorPrimary"
android :layout_height= "?android:attr/actionBarSize" />
android :id= "@+id/toolbar"
android :layout_width= "match_parent"
android :background= "?attr/colorPrimary"
android :layout_height= "?android:attr/actionBarSize" />
<!--?attr/ 这种样式代表允许你使用当前theme中任意的attribute-->
大抵来说,预设常用的几个元素就如图中所示,接着就依序来说明之:
-
setNavigationIcon
即设定 up button 的图标,因为 Material 的介面,在 Toolbar这里的 up button样式也就有別于过去的 ActionBar 哦。
-
setLogo
APP 的图标。 -
setTitle
主标题。 -
setSubtitle
副标题。 - setOnMenuItemClickListener
设定菜单各按鈕的动作。
菜单部分,需要先在res/menu/menu_main.xml左定义:
<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_edit" android:title="@string/action_edit" android:orderInCategory="80" android:icon="@drawable/ab_edit" app:showAsAction="ifRoom" />
<item android:id="@+id/action_share"
android:title="@string/action_edit"
android:orderInCategory="90"
android:icon="@drawable/ab_share"
app:showAsAction="ifRoom" />
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="never"/>
</menu>
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
String msg = "";
switch (menuItem.getItemId()) {
case R.id.action_edit:
msg += "Click edit";
break;
case R.id.action_share:
msg += "Click share";
break;
case R.id.action_settings:
msg += "Click setting";
break;
}
if(!msg.equals("")) {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
return true;
}
};
再回到MainActivity.java 中加入OnMenuItemClickListener 的监听者:
private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() {@Override
public boolean onMenuItemClick(MenuItem menuItem) {
String msg = "";
switch (menuItem.getItemId()) {
case R.id.action_edit:
msg += "Click edit";
break;
case R.id.action_share:
msg += "Click share";
break;
case R.id.action_settings:
msg += "Click setting";
break;
}
if(!msg.equals("")) {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
return true;
}
};
将onMenuItemClick监听者设置给toolbar
- // Menu item click 的監聽事件一樣要設定在 setSupportActionBar 之后才有作用
- toolbar.setOnMenuItemClickListener(onMenuItemClick);
和 setNavigationIcon 一样,需要將之设定在 setSupportActionBar 之后才有作用。执行上面的代码便会得到下面的界面。