Toorbar組件介紹
Toolbar是在 Android 5.0 開(kāi)始推出的一個(gè) Material Design 風(fēng)格的導(dǎo)航控件 象泵,Google 推出的 Toorbar取代之前的 Actionbar 與 Actionbar 相比乾翔, Toolbar 明顯要靈活的多讶凉,可以放到界面的任意位置记焊。除此之外听想,在設(shè)計(jì) Toolbar 的時(shí)候蛮艰,Google也留給了開(kāi)發(fā)者很多可定制修改的余地,根據(jù)API可以知道Toorbar有如下功能:
- 設(shè)置導(dǎo)航欄圖標(biāo)
- 設(shè)置App的logo
- *支持設(shè)置標(biāo)題和子標(biāo)題 *
- *支持添加一個(gè)或多個(gè)的自定義控件 *
- *支持Action Menu *
效果瀏覽
使用Toorbar
官方提供了Toolbar,也提供了Support library向下兼容的支持包窍侧,如果是5.0以下的需要添加如下依賴
compile 'com.android.support:appcompat-v7:23.3.0'
然后因?yàn)門(mén)oorbar要替代之前的Actionbar ,所以要隱藏之前的Actionbar,直接在res/values/style.xml修改:NoActionBar即可转绷,
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
然后在activity_main布局文件中加入:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:orientation="vertical"
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="#AFAFff"
android:elevation="4dp"
>
<!-- 自定義控件顯示-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"/>
</android.support.v7.widget.Toolbar>
</LinearLayout>
布局文件中的android:elevation="4dp"代表控件的陰影高度
在res目錄先新建menu文件夾伟件,再在menu文件下新建menu_seting.xml文件,追加內(nèi)容如下:
<?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">
<item
android:id="@+id/share"
android:title="分享"
android:icon="@drawable/share"
android:orderInCategory="3"
app:showAsAction="ifRoom" />
<item
android:id="@+id/cacle"
android:title="取消"
android:orderInCategory="1"
app:showAsAction="never" />
<item
android:id="@+id/setting"
android:title="設(shè)置"
android:icon="@drawable/setting"
android:orderInCategory="4"
app:showAsAction="ifRoom" />
<item
android:id="@+id/change"
android:orderInCategory="2"
android:title="改變"
app:showAsAction="never" />
</menu>
菜單布局文件中的item 的showAsAction屬性,
- always:總是顯示在界面上
- never:不顯示在界面上议经,只讓出現(xiàn)在右邊的三個(gè)點(diǎn)中
- ifRoom:如果有位置才顯示斧账,不然就出現(xiàn)在右邊的三個(gè)點(diǎn)中
在這補(bǔ)充下Android中菜單資源的相關(guān)知識(shí),
菜單資源文件必須放在res/menu目錄中煞肾。菜單資源文件必須使用<menu>標(biāo)簽作為根節(jié)點(diǎn)咧织。除了<menu>標(biāo)簽外,還有另外兩個(gè)標(biāo)簽用于設(shè)置菜單項(xiàng)和分組籍救,這兩個(gè)標(biāo)簽是<item>和<group>习绢。
<menu>標(biāo)簽沒(méi)有任何屬性,但可以嵌套在<item>標(biāo)簽中蝙昙,表示子菜單的形式闪萄。不過(guò)<item>標(biāo)簽中不能再嵌入<item>標(biāo)簽。
1.<item>標(biāo)簽的屬性含義如下:
- Id:表示菜單項(xiàng)的資源ID
- menuCategory:同種菜單項(xiàng)的種類奇颠。該屬性可取4個(gè)值:Container败去、system、secondary和alternative大刊。通過(guò)menuCategroy屬性可以控制菜單項(xiàng)的位置为迈。例如將屬性設(shè)為system,表示該菜單項(xiàng)是系統(tǒng)菜單缺菌,應(yīng)放在其他種類菜單項(xiàng)的后面葫辐。
- orderInCategor:同種類菜單的排列順序。該屬性需要設(shè)置一個(gè)整數(shù)值伴郁。例如menuCategory屬性值都為system的3個(gè)菜單項(xiàng)(item1耿战、item2和item3)。將這3個(gè)菜單項(xiàng)的orderInCategory屬性值設(shè)為3焊傅、2武福、1趋观,那么item3會(huì)顯示在最前面授帕,而item1會(huì)顯示在最后面巷查。
- title:菜單項(xiàng)標(biāo)題(菜單項(xiàng)顯示的文本)
- titleCondensed:菜單項(xiàng)的短標(biāo)題。當(dāng)菜單項(xiàng)標(biāo)題太長(zhǎng)時(shí)會(huì)顯示該屬性值
- icon:菜單項(xiàng)圖標(biāo)資源ID
- alphabeticShortcut:菜單項(xiàng)的字母快捷鍵
- numericShortcut:菜單項(xiàng)的數(shù)字快捷鍵
- checkable:表示菜單項(xiàng)是否帶復(fù)選框握巢。該屬性可設(shè)計(jì)為true或false
- checked:如果菜單項(xiàng)帶復(fù)選框(checkable屬性為true)晕鹊,該屬性表示復(fù)選框默認(rèn)狀態(tài)是否被選中。可設(shè)置的值為true或false
- visible:菜單項(xiàng)默認(rèn)狀態(tài)是否可視
- enable:菜單項(xiàng)默認(rèn)狀態(tài)是否被激活
-2.<group>標(biāo)簽的屬性含義如下:
- id:表示菜單組的ID
- menuCategory:與<item>標(biāo)簽的同名屬性含義相同溅话。只是作用域?yàn)椴藛谓M
- orderInCategory:與<item>標(biāo)簽的同名屬性含義相同晓锻。只是作用域?yàn)椴藛谓M
- checkableBehavior:設(shè)置該組所有菜單項(xiàng)上顯示的選擇組件(CheckBox或Radio Button)。如果將該屬性值設(shè)為all飞几,顯示CheckBox組件砚哆;如果設(shè)為single,顯示Radio Button組件屑墨;如果設(shè)為none躁锁,顯示正常的菜單項(xiàng)(不顯示任何選擇組件)。要注意的是
- visible:表示當(dāng)前組中所有菜單項(xiàng)是否顯示绪钥。該屬性可設(shè)置的值是true或false
- enable:表示當(dāng)前組中所有菜單項(xiàng)是否被激活灿里。該屬性可設(shè)置的值是true或false
然后在MainActivity.java中設(shè)置相關(guān)屬性:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
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.id_toolbar);
toolbar.setNavigationIcon(R.drawable.navigation_bar);//設(shè)置導(dǎo)航欄圖標(biāo)
toolbar.setLogo(R.drawable.app_logo);//設(shè)置app logo
toolbar.setTitle("Title");//設(shè)置主標(biāo)題
toolbar.setSubtitle("Subtitle");//設(shè)置子標(biāo)題
toolbar.inflateMenu(R.menu.menu_seting);//設(shè)置右上角的填充菜單
//設(shè)置toorbar的左側(cè)導(dǎo)航欄圖標(biāo)點(diǎn)擊事件
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"導(dǎo)航欄圖標(biāo)",Toast.LENGTH_LONG).show();
}
});
//設(shè)置右側(cè)填充菜單中的Item點(diǎn)擊事件
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.cacle:
Toast.makeText(MainActivity.this,"取消",Toast.LENGTH_LONG).show();
break;
case R.id.share:
Toast.makeText(MainActivity.this,"分享",Toast.LENGTH_LONG).show();
break;
case R.id.setting:
Toast.makeText(MainActivity.this,"設(shè)置",Toast.LENGTH_LONG).show();
break;
case R.id.change:
Toast.makeText(MainActivity.this,"改變",Toast.LENGTH_LONG).show();
break;
default:break;
}
return true;
}
});
}
}