Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 11 OptionsMenu 菜單

11 OptionsMenu 菜單

編輯:關於Android編程

OptionsMenu 選項菜單(系統菜單 )

OptionsMenu:系統級別菜單

菜單的使用步驟:

1. res裡的menu裡添加布局 在布局裡寫菜單項

2. 在邏輯代碼中使用OnCreateOptionMenu()方法 將布局展示到菜單

3. 監聽菜單項 onOptionsItemSelected() 方法進行監聽 注意若設置圖片不顯示那麼打破封裝性修改源碼

案例

代碼

效果圖

 

設置圖片但沒有顯示的根圖

 

 

設置了效果圖的子按鈕

 

解決辦法如下

package com.fmy.menu1;

import java.lang.reflect.Method;

import com.fmy.menu1.R;

import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.SubMenu;

import android.view.View;

import android.widget.TextView;

public class MainActivity extends Activity {

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv = (TextView)findViewById(R.id.tv);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.layout, menu);

//設置開啟圖片有效

setIconEnable(menu,true);

return super.onCreateOptionsMenu(menu);

}

//enable為true時,菜單添加圖標有效,enable為false時無效。4.0+系統默認無效

private void setIconEnable(Menu menu, boolean enable)

{

try

{

Class clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");

Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);

m.setAccessible(true);

//MenuBuilder實現Menu接口,創建菜單時,傳進來的menu其實就是MenuBuilder對象(java的多態特征)

m.invoke(menu, enable);

} catch (Exception e)

{

e.printStackTrace();

}

}

}

XML中的一些屬性

案例1:

如果showAsAction設置為always 超出部分會怎麼樣

代碼:

 

案例一

 

案例2

用代碼注冊按鈕 和在xml中設置子菜單按鈕

在xml:

 

案例二xml中的效果圖

 

java代碼:

package com.fmy.menu1;

import java.lang.reflect.Method;

import com.fmy.menu1.R;

import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.SubMenu;

import android.view.View;

import android.widget.TextView;

public class MainActivity extends Activity {

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv = (TextView)findViewById(R.id.tv);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.layout, menu);

/**

* groupId --->> group的id值 即:放入哪個分組中

* itemId --->> 為這個item設置一個id 以後在監聽中可用到

* order --->> 順序

* title --->> 標題

*/

SubMenu sub = menu.addSubMenu(menu.NONE, 1, menu.NONE, "2");

sub.setIcon(R.drawable.ic_launcher);

sub.addSubMenu(1, 2, menu.NONE, "呵呵");

sub.addSubMenu(1, 2, menu.NONE, "哈哈");

sub.addSubMenu(menu.NONE, 2, menu.NONE, "你好朋友");

return super.onCreateOptionsMenu(menu);

}

}

 

java代碼生成的效果圖1

 

 

java代碼生成的效果圖1

 

案例3

監聽事件

xml 代碼:

java代碼:

package com.fmy.menu1;

import java.lang.reflect.Method;

import com.fmy.menu1.R;

import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.SubMenu;

import android.view.View;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity {

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv = (TextView)findViewById(R.id.tv);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.layout, menu);

//設置開啟圖片有效

setIconEnable(menu,true);

return super.onCreateOptionsMenu(menu);

}

//enable為true時,菜單添加圖標有效,enable為false時無效。4.0+系統默認無效

private void setIconEnable(Menu menu, boolean enable)

{

try

{

Class clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");

Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);

m.setAccessible(true);

//MenuBuilder實現Menu接口,創建菜單時,傳進來的menu其實就是MenuBuilder對象(java的多態特征)

m.invoke(menu, enable);

} catch (Exception e)

{

e.printStackTrace();

}

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()){

case R.id.root:

Toast.makeText(this, "root", 0).show();

break;

case R.id.boy1:

Toast.makeText(this, "boy1", 0).show();

break;

case R.id.boy2:

Toast.makeText(this, "boy2", 0).show();

break;

default:

break;

}

return super.onOptionsItemSelected(item);

}

}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved