ActionBar
簡介
- 屏幕部的工具欄
設(shè)置ActionBar
圖標(biāo)和文字
- 可以在
<application>
或者<activity>
中通過android:logo
來進(jìn)行指定圖標(biāo):<activity android:name="com.example.actionbartest.MainActivity" android:label="天氣" android:logo="@drawable/weather" > </activity>
獲取ActionBar
ActionBar actionBar = getActionBar();
隱藏ActionBar
ActionBar actionBar = getActionBar();
actionBar.hide();
子標(biāo)題
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
可以使當(dāng)前布局文件得知Activity
的主題,從而便于根據(jù)渲染上下文預(yù)覽。 -
app:showAsAction
:-
never
:不顯示。 -
always
:顯示辨泳。 -
ifRoom|withText
:如果空間足夠,顯示圖片及文字玖院;否則菠红,僅顯示圖片,或不顯示隱藏到溢出菜單中难菌。
-
創(chuàng)建菜單選項(xiàng)代碼
// 在Activity或Fragment中
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_quiz, menu);
return true;
}
設(shè)置菜單子項(xiàng)
// 在onCreateOptionsMenu中
MenuItem menuItem = menu.findItem(R.id.menu_item_1);
menuItem.setTitle(/* String */);
處理菜單選項(xiàng)事件
- 更新選項(xiàng)菜單的子項(xiàng)時(shí)试溯,需要調(diào)用
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); } }
選項(xiàng)菜單子項(xiàng)發(fā)生變化時(shí)
// 通知變化
getActivity().invalidateOptionsMenu();
層級導(dǎo)航
簡介
- 后退按鈕導(dǎo)航和層級導(dǎo)航(向上按鈕導(dǎo)航)并不一樣郊酒。層級導(dǎo)航是開始一個(gè)新的
Activity
遇绞,彈出回退棧里此Activity
以上的Activity
键袱。后退按鈕導(dǎo)航則是彈出回退棧里最頂層的Activity
。
第一步
- 在 AndroidManifest.xml 中的
Activity
里設(shè)置android:parentActivityName
:<activity android:name=".BActivity" android:label="@string/app_name" android:parentActivityName=".AActivity"> </activity>
第二步
// 效果為ActionBar圖標(biāo)左側(cè)會(huì)出現(xiàn)一個(gè)向左的箭頭摹闽。
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
第三步
- 【待驗(yàn)證】似乎可以省略這一步杠纵。
@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) {
/* 完成輸入,點(diǎn)擊搜索 */
/* 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(/* 進(jìn)入輸入狀態(tài) */);
return super.onCreateOptionsMenu(menu);
}
示例解說
-
XML 部分:
-
app:actionViewClass
:ActionView
可以放在ActionBar
上钩骇,可以通過定制ActionView
實(shí)現(xiàn)自己想要的功能比藻。 -
app:showAsAction
:collapseActionView
可能會(huì)導(dǎo)致顯示文字而不是圖標(biāo)。
-