您的位置:首页 > 移动开发 > Android开发

android---(菜单)

2015-10-06 10:02 519 查看
1.Options menu(老式的) and action bar(新版的,在标题栏显示)

2.Context menu()

3.Popup menu(弹出菜单)

Options menu and action bar:

选项菜单的步骤

1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,当菜单第一次被打开时调用

2.调用Menu的add()方法添加菜单项(Menultem),同时可以调用Menultem的seticon()方法来为菜单设置图标,

3.当菜单项(Menultem)被选择时,覆盖Activity的onOptionsltemSelected(Menultem item)来响应事件

代码的方法添加菜单:

public class MainActivity extends AppCompatActivity {

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

//用于创建选项菜单事件的方法,在打开界面时会被自动调用
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.

//getMenuInflater :获取一个菜单填充器
//getMenuInflater().inflate(R.menu.menu_main, menu);

//添加菜单项(组id,当前选项id,排序,menu标题)
menu.add(0,100,1,"设置游戏"); //返回的是MenuItem对象
menu.add(0,200,2,"开始游戏");
menu.add(0,300,3,"退出游戏");
return true;
}

//菜单选项的单击处理事件方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

switch (id){
case 100:
Toast.makeText(this,"正在打开设置游戏界面",Toast.LENGTH_SHORT).show();
break;
case 200:
Toast.makeText(this,"正在打开开始游戏界面",Toast.LENGTH_SHORT).show();
break;
case 300:
Toast.makeText(this,"退出游戏",Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
}


men.xml:
配置的方法添加菜单
<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"
tools:context=".MainActivity">

//  app:showAsAction:
//never:当有图片时,只显示文字
//ifRoom:显示图片,而不显法文字
//always:在标题栏中显示
<item android:id="@+id/game_set"
android:title="游戏设置"
android:orderInCategory="100"
app:showAsAction="ifRoom"
android:icon="@android:drawable/ic_menu_set_as"
/>

<item android:id="@+id/game_start"
android:title="开始游戏"
android:orderInCategory="200"
app:showAsAction="ifRoom"
android:icon="@android:drawable/ic_media_play"
/>

<item android:id="@+id/game_exit"
android:title="退出游戏"
android:orderInCategory="300"
app:showAsAction="never"
android:icon="@android:drawable/ic_menu_edit"
/>
</menu>

2.核心代码:
public class MainActivity extends AppCompatActivity {

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

//用于创建选项菜单事件的方法,在打开界面时会被自动调用
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.

//getMenuInflater :获取一个菜单填充器
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

//菜单选项的单击处理事件方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

switch (id){
case R.id.game_set:
Toast.makeText(this,"正在打开设置游戏界面",Toast.LENGTH_SHORT).show();
break;
case R.id.game_start:
Toast.makeText(this,"正在打开开始游戏界面",Toast.LENGTH_SHORT).show();
break;
case R.id.game_exit:
Toast.makeText(this,"退出游戏",Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
}


Context Menu(上下文菜单):

与上下文环境有关,思想类似windows中的右键单击的快捷菜单,操作时需要长时间按住某个东东不放。

步骤:

1.覆盖Activity的onCreateContextMenu(Menu menu)方法,调用Menu的add()方法添加菜单项(Menultem)

2.覆盖Activity的onContextltemSelected(Menultem item)来响应事件

3.调用register的ForContextMenu()方法来为视图注册上下文菜单

menu.xml:
<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"
tools:context=".MainActivity"

>

<item android:id="@+id/red"

android:title="红色"
android:orderInCategory="100"
/>

<item android:id="@+id/blue"

android:title="蓝色"
android:orderInCategory="200"
/>

<item android:id="@+id/green"

android:title="绿色"
android:orderInCategory="300"
/>

</menu>

activity.xml
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="长按我设置背影颜色"
android:id="@+id/textView"
android:gravity="center"
/>

核心代码:

public class MainActivity extends AppCompatActivity {

private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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

//注册上下文菜单到 textView组件上
registerForContextMenu(textView);

}

//创建上下文菜单的事件方法
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);

//将这个菜单配置文件添加到菜单项中
getMenuInflater().inflate(R.menu.menu_main,menu);
}

//上下文 菜单的单击事件
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.red:
textView.setBackgroundColor(Color.RED);
break;
case R.id.green:
textView.setBackgroundColor(Color.GREEN);
break;
case R.id.blue:
textView.setBackgroundColor(Color.BLUE);
break;
}

return super.onContextItemSelected(item);
}
}


Popup Menu:

弹出式菜单是停靠在一个View 上的一个模式菜单。如果View对象下方有空间,那么弹出菜单将显示在停靠对象的下方,否则会显示在上方。版本11以上。

menu.xml:
<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" tools:context=".MainActivity">

<item android:id="@+id/S"
android:title="S"
android:orderInCategory="100"
/>

<item android:id="@+id/M"
android:title="M"
android:orderInCategory="200"
/>

<item android:id="@+id/L"
android:title="L"
android:orderInCategory="300"
/>

<!--
<group></group>:可以将菜单放在一组中

可以写多级子菜单
<item>
<menu>
<item>

</item>

</menu>

</item>
-->
</menu>

activity.xml:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button_select"

android:text="请选择型号"

android:onClick="typeSize"

/>

public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener {

private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button_select);
}

//d按扭单击事件
public void typeSize(View v){
//创建组件
PopupMenu popupMenu = new PopupMenu(this,v);

//创建菜单填充容器
MenuInflater inflater = popupMenu.getMenuInflater();

//填充
inflater.inflate(R.menu.menu_main,popupMenu.getMenu());

//监听菜单单击事件
popupMenu.setOnMenuItemClickListener(this);

//显示
popupMenu.show();
}

@Override
public boolean onMenuItemClick(MenuItem item) {

switch (item.getItemId()){
case R.id.L:
Toast.makeText(this,"你选择了L号",Toast.LENGTH_SHORT).show();
break;
case R.id.M:
Toast.makeText(this,"你选择了M号",Toast.LENGTH_SHORT).show();
break;
case  R.id.S:
Toast.makeText(this,"你选择了S号",Toast.LENGTH_SHORT).show();
break;
}

return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: