ActionBar
簡介
- 屏幕部的工具欄
設置ActionBar
圖標和文字
- 可以在
<application>
或者<activity>
中通過android:logo
來進行指定圖標:<activity android:name="com.example.actionbartest.MainActivity" android:label="天氣" android:logo="@drawable/weather" > </activity>
獲取ActionBar
ActionBar actionBar = getActionBar();
隱藏ActionBar
ActionBar actionBar = getActionBar();
actionBar.hide();
子標題
ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
if (actionBar != null){
actionBar.setSubtitle(/* String */);
}
OptionsMenu
簡介
- 在工具欄上面顯示的菜單。
簡單示例
XML
代碼
在 menu_quiz.xml 中:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".QuizActivity">
<item
android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="never"/>
</menu>
解說
-
tools:context
可以使當前布局文件得知Activity
的主題,從而便于根據渲染上下文預覽。 -
app:showAsAction
:-
never
:不顯示。 -
always
:顯示。 -
ifRoom|withText
:如果空間足夠,顯示圖片及文字;否則,僅顯示圖片,或不顯示隱藏到溢出菜單中。
-
創建菜單選項代碼
// 在Activity或Fragment中
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_quiz, menu);
return true;
}
設置菜單子項
// 在onCreateOptionsMenu中
MenuItem menuItem = menu.findItem(R.id.menu_item_1);
menuItem.setTitle(/* String */);
處理菜單選項事件
- 更新選項菜單的子項時,需要調用
invalidateOptionsMenu()
通知更新。// 在Activity或Fragment中 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: // doSomething return true; default: return super.onOptionsItemSelected(item); } }
選項菜單子項發生變化時
// 通知變化
getActivity().invalidateOptionsMenu();
層級導航
簡介
- 后退按鈕導航和層級導航(向上按鈕導航)并不一樣。層級導航是開始一個新的
Activity
,彈出回退棧里此Activity
以上的Activity
。后退按鈕導航則是彈出回退棧里最頂層的Activity
。
第一步
- 在 AndroidManifest.xml 中的
Activity
里設置android:parentActivityName
:<activity android:name=".BActivity" android:label="@string/app_name" android:parentActivityName=".AActivity"> </activity>
第二步
// 效果為ActionBar圖標左側會出現一個向左的箭頭。
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
第三步
- 【待驗證】似乎可以省略這一步。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
TaskStackBuilder.create(this)
.addNextIntentWithParentStack(upIntent)
.startActivities();
} else {
upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, upIntent);
}
return true;
}
}
ActionView
SearchView
簡單示例
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/menu_item_search"
android:title="@string/search"
android:icon="@drawable/ic_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView"/>
</menu>
代碼
// 在Activity或Fragment中
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_activity_actions, menu);
MenuItem searchItem = menu.findItem(R.id.menu_item_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
/* 完成輸入,點擊搜索 */
/* do something */
// 隱藏鍵盤
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getActivity().getWindow().getDecorView().getWindowToken(), 0);
searchView.onActionViewCollapsed();
return true;
}
@Override
public boolean onQueryTextChange(String s) {
/* do something */
return false;
}
});
searchView.setOnSearchClickListener(/* 進入輸入狀態 */);
return super.onCreateOptionsMenu(menu);
}
示例解說
-
XML 部分:
-
app:actionViewClass
:ActionView
可以放在ActionBar
上,可以通過定制ActionView
實現自己想要的功能。 -
app:showAsAction
:collapseActionView
可能會導致顯示文字而不是圖標。
-