菜单:实现选项菜单和上下文菜单,掌握用菜单资源文件实现菜单功能的方法。
MainActivity:
package com.example.caidan;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity {
private RelativeLayout root;
private Button btn1,btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
root=(RelativeLayout) findViewById(R.id.root);
btn1=(Button)findViewById(R.id.btn1);
btn2=(Button)findViewById(R.id.btn2);
registerForContextMenu(btn1);
registerForContextMenu(btn2);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.option_menu,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.exit:
AlertDialog.Builder exitBuilder=new AlertDialog.Builder(this);
exitBuilder.setCancelable(false);
exitBuilder.setMessage("你确定要退出吗?");
exitBuilder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MainActivity.this.finish();
}
});
exitBuilder.setNegativeButton("取消",null);
exitBuilder.create().show();
break;
case R.id.blue:
root.setBackgroundColor(Color.BLUE);
break;
case R.id.yellow:
root.setBackgroundColor(Color.YELLOW);
break;
case R.id.green:
root.setBackgroundColor(Color.GREEN);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo MenuInfo){
switch (v.getId()){
case R.id.btn1:
getMenuInflater().inflate(R.menu.context_menu_btn1,menu);
break;
case R.id.btn2:
getMenuInflater().inflate(R.menu.context_menu_btn2,menu);
break;
default:break;
}
super.onCreateContextMenu(menu,v,MenuInfo);
}
public boolean onContextItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.text_red:
btn1.setTextColor(Color.RED);
break;
case R.id.text_gray:
btn1.setTextColor(Color.GRAY);
break;
case R.id.text_green:
btn1.setTextColor(Color.GREEN);
break;
case R.id.rename:
AlertDialog.Builder nameBuilder=new AlertDialog.Builder(this);
nameBuilder.setTitle("请输入新的名字");
final EditText nameText=new EditText(this);
nameBuilder.setView(nameText);
nameBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
btn1.setText(nameText.getText());
}});
nameBuilder.setNegativeButton("取消",null);
nameBuilder.create().show();
break;
case R.id.bg_cyan:
btn2.setBackgroundColor(Color.CYAN);
break;
case R.id.bg_yellow:
btn2.setBackgroundColor(Color.YELLOW);
break;
case R.id.bg_magenta:
btn2.setBackgroundColor(Color.MAGENTA);
break;
case R.id.smaller:
btn2.setTextSize(10);
break;
case R.id.middle:
btn2.setTextSize(20);
break;
case R.id.langer:
btn2.setTextSize(36);
break;}
return super.onContextItemSelected(item);
}}
context_menu_btn1:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="更改文本颜色">
<menu>
<item android:title="红色"
android:id="@+id/text_red"/>
<item android:title="灰色"
android:id="@+id/text_gray"/>
<item android:title="绿色"
android:id="@+id/text_green"/>
</menu>
</item>
<item android:title="重命名"
android:id="@+id/rename"/>
</menu>
context_menu_btn2:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="更改文字大小">
<menu>
<item android:title="较小"
android:id="@+id/smaller"/>
<item android:title="适中"
android:id="@+id/middle"/>
<item android:title="较大"
android:id="@+id/langer"/>
</menu>
</item>
<item android:title="更改背景颜色">
<menu>
<item android:title="青色"
android:id="@+id/bg_cyan"/>
<item android:title="黄色"
android:id="@+id/bg_yellow"/>
<item android:title="品红"
android:id="@+id/bg_magenta"/>
</menu>
</item>
</menu>
Activity_main:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:id="@+id/root"
tools:context=".MainActivity">
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮一"/>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn1"
android:text="按钮二"/>
</RelativeLayout>
Option_menu:
<?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:title="更换背景颜色"
app:showAsAction="always">
<menu>
<item
android:title="蓝色"
android:id="@+id/blue"/>
<item
android:title="黄色"
android:id="@+id/yellow"/>
<item
android:title="绿色"
android:id="@+id/green"/>
</menu>
</item>
<item
android:title="退出"
android:id="@+id/exit"
app:showAsAction="always"/>
</menu>