android中使用toolbar
系統默認使用的是ActionBar,就是界面中的標題欄,但是由於ActionBar設計的原因,被限定只能位於活動的頂部,從而不能實現Material Design效果,所以官方建議使用Toolbar替換掉ActionBar
下面來看一下,如果使用Toolbar
1、首先先去掉默認的ActionBar,修改styles.xml,這個styles.xml是項目自帶的,位於src/main/res/values目錄下,註意看紅色內容為我添加的內容:
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="AppTheme2" 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></resources>
AppTheme風格是系統默認的,也就是帶ActionBar的
AppTheme2風格是我添加的,是不帶ActionBar的,區別就是把parent屬性修改為Theme.AppCompat.Light.NoActionBar
當然如果整個項目都不需要ActionBar,直接修改默認的AppTheme風格就可以了
修改AndroidManifest.xml文件,這裏我截了圖,沒有粘代碼:
如果希望整個項目都使用AppTheme2風格,直接按我截圖的方式修改即可,如果只是部分Activity,可以專門為指定Activity指定android:theme屬性
2、在Activity活動上添加Toolbar
添加好toolbar控件,指定好id,然後需要在java代碼中註冊一下:
在onCreate方法中添加如下代碼:
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
如果需要不顯示標題,並且添加返回按鈕,修改上面的代碼:
@Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId()==android.R.id.home) { finish(); } return super.onOptionsItemSelected(item); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main36); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowTitleEnabled(false); } }); }
上面的代碼重寫了onOptionsItemSelected方法,用於響應返回按鈕事件
3、為Toolbar添加操作按鈕
這個添加按鈕其實就是創建 option menu,這個我在之前的文章有講:Android中創建option menu
這裏我再創建一個,在src/main/res/menu目錄下創建menu資源文件menu1.xml:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/editItem" android:icon="@android:drawable/ic_menu_edit" android:title="編輯" app:showAsAction="always" /> <item android:id="@+id/deleteItem" android:icon="@android:drawable/ic_menu_delete" android:title="刪除" app:showAsAction="always" /> <item android:id="@+id/helpItem" android:icon="@android:drawable/ic_menu_help" android:title="幫助" app:showAsAction="always" /> </menu>
註意這個app:showAsAction屬性,設成always是指顯示在標題欄中,設為ifRoom是指空間夠就顯示在標題欄中,設為never是顯示在菜單欄中
然後在java代碼中註冊這個菜單,並且響應對應按鈕事件,最終代碼如下:
public class Main36Activity extends AppCompatActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu4,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId()==android.R.id.home) { finish(); } else if(item.getItemId()==R.id.editItem) { Toast.makeText(Main36Activity.this, "編輯操作", Toast.LENGTH_SHORT).show(); } else if(item.getItemId()==R.id.deleteItem) { Toast.makeText(Main36Activity.this, "刪除操作", Toast.LENGTH_SHORT).show(); } else if(item.getItemId()==R.id.helpItem) { Toast.makeText(Main36Activity.this, "幫助操作", Toast.LENGTH_SHORT).show(); } return super.onOptionsItemSelected(item); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main36); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowTitleEnabled(false); } }
展示效果:
android中使用toolbar