Action Bar 的相關操作
阿新 • • 發佈:2018-12-07
要想將所有Activity 的Action Bar隱藏或者單獨隱藏某個或某幾個Activity中的Action Bar
只需要再AndroidManifest.xml中將對應的theme改成字尾為 NoActionBar, 如
<activity android:name=".Demo01" //更改當前Activity的ActionBar為隱藏狀態 android:theme="@style/Theme.AppCompat.Light.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
但這種方式的缺陷在於, 一旦設定 , 再程式執行時不能更改 , 不能靈活的隱藏和顯示 ,
可以通過
//獲取當前ActionBar
actionBar = getSupportActionBar();
通過
actionBar.hide();
actionBar.show();
顯示和隱藏ActionBar
public class ActionBarDemo extends AppCompatActivity { private boolean ActionBarIsShow = true; private ActionBar actionBar; private Button actionBarBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_action_bar_demo); actionBarBtn = findViewById(R.id.actionBarBtn); //獲取當前ActionBar actionBar = getSupportActionBar(); } @SuppressLint("SetTextI18n") public void showActionBar(View view) { if (ActionBarIsShow){ //隱藏ActionBar actionBar.hide(); actionBarBtn.setText("顯示ActionBar"); ActionBarIsShow = false; }else { //顯示ActionBar actionBar.show(); actionBarBtn.setText("隱藏ActionBar"); ActionBarIsShow = true; } } }
新增Action Item
- 定義選單資原始檔
- 在onCreateOptionsMenu()方法中載入選單資原始檔
要在ActionBar上新增圖示, 需要先建立資原始檔, 在res目錄下建立menu目錄
然後建立menu.xml資原始檔
<?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/search" android:icon="@drawable/icon_search" android:title="search" app:showAsAction="always" /> <!--showAsAction 下的選項 always : 總是顯示在ActionBar上--> <!--ifRoom : 當Action有可用空間時就顯示在ActionBar上--> <!--沒有足夠空間,就顯示在溢位選單中--> <!--never : 表示選單項永遠都不顯示在ActionBar上--> <!--withText: 將選單項顯示在ActionBar上,並且顯示文字,--> <!--受到ActionBar空間的顯示,文字可能顯示不全--> <item android:id="@+id/home" android:icon="@drawable/icon_home" android:title="主頁" app:showAsAction="ifRoom" /> <item android:id="@+id/setting" android:title="設定" app:showAsAction="ifRoom" /> <item android:id="@+id/about" android:title="關於" app:showAsAction="never" /> </menu>
然後在Java程式碼中,重寫onCreateOptionsMenu方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//例項化一個MenuInflater物件
MenuInflater inflater = getMenuInflater();
//解析選單檔案
inflater.inflate(R.menu.menu,menu);
return super.onCreateOptionsMenu(menu);
}
新增Action View
在item裡更改 search的item
<item
android:id="@+id/search"
android:icon="@drawable/icon_search"
android:title="搜尋"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView" />
<!--新增searchView實現類(android自帶)-->
這樣點選搜尋圖示會自動彈出搜尋框
響應Action按鈕的點選事件, 重寫onOptionsItemSelected方法
通過方法傳入的MenuItem引數呼叫它的getItemId()方法和menu資源中的id進行比較
從而辨別出使用者點選的是哪一個Action按鈕
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.home:
Toast.makeText(this, "點選了主頁按鈕", Toast.LENGTH_SHORT).show();
default:
return super.onOptionsItemSelected(item);
}
}
Action Bar實現層級導航, 在子頁面中顯示返回箭頭
新建兩個Acitvity Demo02和NewActivity Demo02作為主頁面
在Demo02 中新增一個Button ,點選Button跳轉到NewActivtiy的頁面
NewActivity的原始碼
public class NewActivity extends AppCompatActivity {
@SuppressLint("RestrictedApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
//判斷父Activity是否為空,不為空設定導航圖示顯示
if (NavUtils.getParentActivityName(NewActivity.this) != null) {
//顯示向左的箭頭圖示
getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
}
//需要在AndroidManifest.xml檔案中新增meta標籤
// <activity android:name=".Demo02.NewActivity"
// android:label="新頁面">
// <meta-data
// android:name="android.support.PARENT_ACTIVITY"
// android:value=".Demo02.NewActivity" />
// 這個設定父Activity
// </activity>
}
}