一、一级菜单


代码
在某个页面中点击menu按钮,添加几个菜单项,点击相应的菜单项,能执行相应的操作
java代码如下:

package com.event;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.WindowManager.LayoutParams;
import android.widget.Button;
import android.widget.TextView;

public class EventText1 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN, LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);

}


public void onClickButton(View view) {
//在这右键找onCreateOptionsMenu

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add("menu1");
menu.add(
"menu2");

return true;
}
//在这右键onOptionsItemSelected,这段代码是使得相应的菜单选项能够相应。

@Override
public boolean onOptionsItemSelected(MenuItem item) {

if(item.getTitle().equals("menu1")){//字符串的等于
Log.v("you selected", item.getTitle().toString());
//在此添加相应的菜单,应该执行的操作
}
else if(item.getTitle().equals("menu2")){//字符串的等于
Log.v("you selected", item.getTitle().toString());
//在此添加相应的菜单,应该执行的操作
}
return super.onOptionsItemSelected(item);
}

}

上面的方法只适合在

onOptionsItemSelected里面直接用字符串进行比较,对于真机里面的,只能用字符串定义引用的方法来用字符串,如@String/...这种方法来用这个字符串,而不能直接引用的时候,
这种方法就不好使了,下面这种更好。

java代码
代码
package com.menu.test1;

import java.text.DateFormat;
import java.util.Date;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.Toast;
//import android.os.IHardwareService;

public class MenuTest1 extends Activity {
/** Called when the activity is first created. */
private LinearLayout mLinearLayout;
private static final int WHITE_BRIGHT = Menu.FIRST;
private static final int GRAY_BRIGHT = WHITE_BRIGHT + 1;
private static final int BLACK_BRIGHT = GRAY_BRIGHT + 1;
private static final int WHITE_DIM = BLACK_BRIGHT + 1;
private static final int GRAY_DIM = WHITE_DIM + 1;
private static final int BLACK_DIM = GRAY_DIM + 1;

private String TAG = "MenuTest1";

// 颜色值定义,程序中并没有全部使用。
private int[] color = { R.drawable.white, R.drawable.gray,
R.drawable.black, R.drawable.blue, R.drawable.pink,
R.drawable.green, R.drawable.orange, R.drawable.yellow };

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//设置全屏 requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags ( WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN );
//然后调用布局
setContentView(R.layout.main);
//设置屏幕的最初亮度
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness
= 0.3f;
getWindow().setAttributes(lp);
mLinearLayout
= (LinearLayout) findViewById(R.id.myLinearLayout1);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add(0, WHITE_BRIGHT, 0,R.string.white_increase);
menu.add(
0,GRAY_BRIGHT,1,R.string.gray_increase);
menu.add(
0,BLACK_BRIGHT,2,R.string.black_increase);
menu.add(
0,WHITE_DIM,3,R.string.white_decrease);
menu.add(
0,GRAY_DIM,4,R.string.gray_decrease);
menu.add(
0,BLACK_DIM,5,R.string.black_decrease);

return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.v(TAG,
"options start...");
switch(item.getItemId()){
     //下面不包括变亮和变暗的代码!
        case WHITE_BRIGHT:
            showMsg("白亮");
            mLinearLayout.setBackgroundResource(color[0]);
            break;
        case GRAY_BRIGHT:
            showMsg("灰亮");
            mLinearLayout.setBackgroundResource(color[1]);
            break;
        case BLACK_BRIGHT:
            showMsg("黑亮");
            mLinearLayout.setBackgroundResource(color[2]);
            break;
        case WHITE_DIM:
            showMsg("白暗");
            mLinearLayout.setBackgroundResource(color[0]);
            break;
        case GRAY_DIM:
            showMsg("灰暗");
            mLinearLayout.setBackgroundResource(color[1]);
            break;
        case BLACK_DIM:
            showMsg("黑暗");
            mLinearLayout.setBackgroundResource(color[2]);
            break;
           
      
}

return super.onOptionsItemSelected(item);
}

private void showMsg(String message) {
Toast msg
= Toast.makeText(MenuTest1.this, message, Toast.LENGTH_LONG);
msg.show();
}

}

string.xml

代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, MenuTest1!</string>
<string name="app_name">MenuTest1</string>
<drawable name="green">#00FF00</drawable>
<drawable name="pink">#FF87EF</drawable>
<drawable name="blue">#00FFEA</drawable>
<drawable name="yellow">#FFFC00</drawable>
<drawable name="orange">#FFCF3B</drawable>
<drawable name="white">#FFFFFF</drawable>
<drawable name="gray">#333333</drawable>
<drawable name="black">#000001</drawable>
<string name="white_increase">白色变亮</string>
<string name="gray_increase">灰色变亮</string>
<string name="black_increase">黑色变亮</string>
<string name="white_decrease">白色变暗</string>
<string name="gray_decrease">灰色变暗</string>
<string name="black_decrease">黑色变暗</string>
</resources>


这样,就可以用
onOptionsItemSelected中就可以用menu.add()中的第二个参数,itemID做为判断的条件了。


java代码中,
原来的参数0,3变为1,0的时候,如下句:
 menu.add(1,WHITE_DIM,0,R.string.white_decrease);
如图:


原来的参数0,3变为1,1的时候,如下句:
 menu.add(1,WHITE_DIM,1,R.string.white_decrease);
如图:所以自己可以变动几个值,就知道第一个和第三个参数的位置关系了。

如果变成
 menu.add(0, WHITE_BRIGHT, 0,R.string.white_increase);
        menu.add(0,GRAY_BRIGHT,1,R.string.gray_increase);
        menu.add(0,BLACK_BRIGHT,2,R.string.black_increase);
        menu.add(1,WHITE_DIM,0,R.string.white_decrease);    
        menu.add(1,GRAY_DIM,1,R.string.gray_decrease);
        menu.add(1,BLACK_DIM,2,R.string.black_decrease);
如下图:

当点击白色变亮的时候,就会出现提示,并且屏幕会变白,这里没有变亮的代码!
如图


所以,比较好的方法,就是在加菜单的时候,add的时候,用四个参数的方法来添加,这样下面点击这个菜单的时候,方便引用。。



二、二级菜单:
用submenu的方式实现一级菜单下面又有子菜单
(待续。。)
三、点击菜单能够出现对话框,有按钮,标题,(对本人来说,最重要的是带Checkbox)
3.1弹出复选框
1、java程序
代码
package com.menu.test3;

//菜单弹出一个对话框(带Checkbox)。

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MenuTest3 extends Activity {
/** Called when the activity is first created. */
private LinearLayout mLinearLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.addSubMenu("屏幕背光");
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
new AlertDialog.Builder(MenuTest3.this)
.setTitle(getResources().getString(R.string.str_title))

// .setSingleChoiceItems(0, 0, listener1)
.setMultiChoiceItems(R.array.dialog,
new boolean[] { false, false },//这两个boolean值表示checkbox的初始状态是选中还是没有选中
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog,
int whichButton, boolean isChecked) {
// 点了Checkbox后的执行的东西
Toast.makeText(MenuTest3.this, "gg",
Toast.LENGTH_LONG).show();
}
})
.setPositiveButton(
"ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { // 点了确定之后执行的东西
Toast.makeText(MenuTest3.this, "ok",
Toast.LENGTH_LONG).show();

}
})
.setNegativeButton(
"cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { // 点了确定之后执行的东西
Toast.makeText(MenuTest3.this, "cancel",
Toast.LENGTH_LONG).show();

}
})
.show();
return super.onOptionsItemSelected(item);
}

}

main.xml
代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id
="@+id/myLinearLayout1"
android:orientation
="vertical"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
/>

string.xml
代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, EX10_01</string>
<string name="app_name">EX10_01</string>
<string name="str_title">选择背光方式</string>
<array name="dialog">
<item>变亮</item>
<item>变暗</item>
</array>
</resources>
运行结果图:





3.2弹出单选框:
java代码:
代码
package com.ment.test5;

//点击menu,弹出单选框

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MenutTest5 extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.addSubMenu("屏幕背光");
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
final CharSequence[] items = {"turn_bright", "turn_dim"};
new AlertDialog.Builder(MenutTest5.this)
.setTitle(getResources().getString(R.string.str_title))
//单选
.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), items[which], Toast.LENGTH_SHORT).show();
}
})

.setPositiveButton(
"ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { // 点了确定之后执行的东西
Toast.makeText(MenutTest5.this, "ok",
Toast.LENGTH_LONG).show();

}
})
.setNegativeButton(
"cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { // 点了确定之后执行的东西
Toast.makeText(MenutTest5.this, "cancel",
Toast.LENGTH_LONG).show();

}
})
.show();
return super.onOptionsItemSelected(item);
}

}



posted on 2010-05-14 11:08  snowdrop  阅读(5546)  评论(0编辑  收藏  举报