自定義ToolBar
- 之前學(xué)習(xí)的ToolBar都是V7包下的赚导,自從AndroidX推出后采桃,嘗試使用這個版本下的Toolbar
第一步:屏蔽掉系統(tǒng)的ActionBar
<resources>
<!-- Base application theme. -->
<!--屏蔽掉ActionBar-->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<!--這個是ActionBar的顏色-->
<item name="colorPrimary">@color/colorPrimary</item>
<!--這個是頂部狀態(tài)欄的顏色-->
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<!--這個是控件選中的顏色-->
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
第二步:自定義ToolBar布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.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="@color/toolbar"
android:minHeight="?attr/actionBarSize">
</androidx.appcompat.widget.Toolbar>
- 關(guān)于 android:minHeight="?attr/actionBarSize"這個屬性秒际,稍加留意内地。定義好之后,將其添加到你需要的布局文件中
<include layout="@layout/my_toolbar"/>
第三步:定義menu菜單
- 首先,要在res文件夾下新建menu文件夾,之后創(chuàng)建menu布局文件
<?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/a_search"
android:orderInCategory="80"
android:title="搜索"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom"
/>
<item
android:id="@+id/a_share"
android:orderInCategory="90"
android:title="分享"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/a_setting"
android:orderInCategory="100"
android:title="設(shè)置"
app:showAsAction="never"/>
</menu>
- android:orderInCategory:控制選項的順序,數(shù)值越小羡棵,優(yōu)先級越高
- app:showAsAction:定義顯示的方式,always(可以一直看到)嗅钻、never(隱藏在"..."之中)皂冰,ifRoom(有位置就顯示,否則就會隱藏在"..."之中)
第四步:加載menu+toolbar
- 重寫onCreateOptionsMenu方法养篓,來加載menu布局
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_layout,menu);
return true;
}
- 初始化控件
// TODO: 注意導(dǎo)包別導(dǎo)錯了
import androidx.appcompat.widget.Toolbar;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView(){
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setLogo(R.drawable.ic_public_black_24dp);
toolbar.setTitle("自定義Toolbar");
setSupportActionBar(toolbar);
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.a_share:
Toast.makeText(MainActivity.this,"a_share",Toast.LENGTH_LONG).show();
break;
case R.id.a_setting:
Toast.makeText(MainActivity.this,"a_setting",Toast.LENGTH_LONG).show();
break;
default:
break;
}
return true;
}
});
}
}
更復(fù)雜的用法可以自己定義秃流;
抽屜布局
- 關(guān)于抽屜布局,在布局文件中柳弄,有以下要注意的點:
1舶胀、DrawerLayout包含主界面和側(cè)滑界面;
2碧注、主界面布局一定要位于所有側(cè)滑界面布局之前嚣伐,寬高應(yīng)設(shè)置為match_parent且不能包含layout_gravity標(biāo)簽
3、側(cè)滑界面必須設(shè)置layout_gravity屬性萍丐,左側(cè)滑出(start/left),右側(cè)滑出(end/right);
4轩端、側(cè)滑界面高度建議設(shè)定為match_parent,寬度可以設(shè)定為一個定值;
5、每個界面邊緣最多允許設(shè)置一個側(cè)滑界面碉纺,否則會報錯;
相關(guān)示例如下:
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--主界面-->
<LinearLayout
android:id="@+id/ll_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/ic_launcher_background"
>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="內(nèi)容界面"
android:gravity="center"
android:textColor="@android:color/white"
/>
</LinearLayout>
<!--側(cè)滑界面-->
<LinearLayout
android:id="@+id/ll_tabs"
android:layout_width="300dp"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@android:color/darker_gray"
android:layout_gravity = "start"
>
<TextView
android:id="@+id/tv_close"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:gravity="center"
android:text="側(cè)滑界面船万,點擊收回側(cè)滑"
android:textColor="@android:color/white" />
</LinearLayout>
</androidx.drawerlayout.widget.DrawerLayout>
- 相關(guān)代碼調(diào)用,ActionBarDrawerToggle + DrawerLayout 對側(cè)滑動作進行監(jiān)聽是常用組合刻撒,
drawerLayout = findViewById(R.id.drawer_layout);
//ActionBarDrawerToggle + DrawerLayout 對側(cè)滑動作進行監(jiān)聽
ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,
R.string.drawer_open,
R.string.drawer_close){
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
}
};
//側(cè)滑狀態(tài)同步
mDrawerToggle.syncState();
//設(shè)置側(cè)滑監(jiān)聽
drawerLayout.setDrawerListener(mDrawerToggle);
TextView close = findViewById(R.id.tv_close);
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//側(cè)滑界面在左邊,右邊為RIGHT
drawerLayout.closeDrawer(Gravity.LEFT);
}
});
抽屜布局是比較常用的布局骨田,在此處做個記錄,方便自己以后查詢和使用声怔。