1 在Activity中創(chuàng)建菜單
- 在
Activity
中重寫兩個方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
- 創(chuàng)建資源文件
在res
目錄下創(chuàng)建menu
目錄玖瘸,用來存放menu
相關(guān)file
創(chuàng)建資源文件menu_done
每個item必須創(chuàng)建id
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/menu_area"
android:orderInCategory="100"http://數(shù)值越大級別越小,可設(shè)置來排位置
android:title="@string/choice_area"http://文字
app:showAsAction="always" />//顯示方式
<item
android:id="@+id/menu_icon"
android:icon="@mipmap/icon_down"http://當(dāng)icon和title一起使用時,顯示圖標(biāo)
android:orderInCategory="100"
android:title="@string/choice_area"
app:showAsAction="always" />
</menu>
- app:showAsAction="" 的含義
always
任何情況都在toolbar
顯示
ifRoom
當(dāng)·toolbar·空間足夠時全闷,顯示,不足時隱藏
never
任何情況 不在toolbar
上顯示鸠项,點擊在右上角的"更多"才能看見
withText
圖文(title+icon)顯示
collapseActionView
隱藏不直接顯示
menuCategory
:同種菜單項的種類饼暑。該屬性可取4個值:container、system狡忙、secondary和alternative梳虽。通過menuCategroy屬性可以控制菜單項的位置。例如將屬性設(shè)為system灾茁,表示該菜單項是系統(tǒng)菜單窜觉,應(yīng)放在其他種類菜單項的后面。 - 在Activity中加載資源文件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//load the file of menu that you created
getMenuInflater().inflate(R.menu.menu_done, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.menu_area) {
//TODO do everything what you want
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
2 在Fragment中創(chuàng)建菜單
在fragment
中創(chuàng)建menu
菜單步驟和在activity
中創(chuàng)建步驟一致北专,也有差別
- 重寫的方法
//此方法與activity的有所不同
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
- 創(chuàng)建
menu
資源同activity中一致 - 加載資源文件
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_area, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.menu_area || id == R.id.menu_icon) {
//TODO 選擇區(qū)域
item.setTitle("海淀區(qū)");
return true;
} else
return super.onOptionsItemSelected(item);
}
當(dāng)這樣寫完了去奔跑起來的時候禀挫,你會發(fā)現(xiàn)想要的根本沒有出現(xiàn),接下來逗余。特咆。。录粱。
-
干貨來了
在fragment
的onCreate()
方法中添加關(guān)鍵代碼腻格,允許添加
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* 在fragment創(chuàng)建menu關(guān)鍵方法
*/
setHasOptionsMenu(true);
}
- 寫在最后的話
在上面的資源文件中定義了2個菜單項,一個顯示文字在左側(cè)啥繁,另一個顯示的圖標(biāo)在文字右側(cè) - 想要實現(xiàn)的效果是無論點擊哪一個都去改變左側(cè)文字
- 實現(xiàn)方案
//在此方法中將要操作的MenuItem定義為全局變量
MenuItem item1;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_area, menu);
item1 = menu.findItem(R.id.menu_area);
super.onCreateOptionsMenu(menu, inflater);
}
//在此方法中通過查找id菜职,以此來確定響應(yīng)事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.menu_area || id == R.id.menu_icon) {
//TODO 選擇區(qū)域
item.setTitle("海淀區(qū)");//這種實際上是操縱2個菜單項
item1.setTitle("改變了");//只操作所想的,perfect
return true;
} else
return super.onOptionsItemSelected(item);
}
如果您有更好的實現(xiàn)方法或是有更完善的旗闽,請給我留言更新酬核,跪謝3分鐘...
持續(xù)更新中...