系统菜单OptionsMenu
代码展示
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/red" android:title="红色"></item>
<item android:id="@+id/black" android:title="黑色"></item>
<item android:id="@+id/yellow" android:title="黄色"></item>
</menu>
public class MainActivity extends AppCompatActivity {
private TextView tvText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
//在这个方法中引用布局menu中的文件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
//点击事件
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int itemId = item.getItemId();
switch (itemId) {
case R.id.red:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
break;
case R.id.yellow:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
break;
case R.id.black:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
效果展示
注意事项
首先得在res下创建资源文件menu包。
其次再敲布局文件,必须在你所要展示的页面引用布局文件。
上下文菜单ContextMenu
代码展示
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/red" android:title="红色"></item>
<item android:id="@+id/black" android:title="黑色"></item>
<item android:id="@+id/yellow" android:title="黄色"></item>
</menu>
private void initView() {
tvText = (TextView) findViewById(R.id.tv_text);
//将菜单绑定到这个控件上
registerForContextMenu(tvText);
}
//长按上下文菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.menu,menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
int itemId = item.getItemId();
switch (itemId){
case R.id.red:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
break;
case R.id.yellow:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
break;
case R.id.black:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
break;
}
return super.onContextItemSelected(item);
}
效果展示
注意事项
必须得 将菜单绑定到这个控件上,执行registerForContextMenu(控件)方法,否则不会出效果。
然后 是长点击才能出效果。
弹出菜单
代码展示
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/one" android:title="第一个"></item>
<item android:id="@+id/two" android:title="第二个"></item>
</menu>
public class Main2Activity extends AppCompatActivity {
private TextView tvShow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initView();
}
private void initView() {
tvShow = (TextView) findViewById(R.id.tv_show);
tvShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//两个参数 一个是上下文 一个是菜单在指定控件的下方
PopupMenu popupMenu = new PopupMenu(Main2Activity.this,tvShow);
//加载布局
popupMenu.inflate(R.menu.pop_menu);
//监听事件
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
int itemId = menuItem.getItemId();
switch (itemId){
case R.id.one:
tvShow.setTextColor(Color.parseColor("#027FFD"));
break;
case R.id.two:
tvShow.setTextColor(Color.parseColor("#AC78B0"));
}
return false;
}
});
//显示布局
popupMenu.show();
}
});
}
}
效果展示
PopupWindow窗口
代码展示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个"
android:textSize="30sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个"
android:textSize="30sp"/>
</LinearLayout>
public class Main3Activity extends AppCompatActivity {
private Button btnButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
initView();
}
private void initView() {
btnButton = (Button) findViewById(R.id.btn_button);
//设置点击事件
btnButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//创建对象
PopupWindow popupWindow = new PopupWindow(Main3Activity.this);
//加载布局
View inflate = LayoutInflater.from(Main3Activity.this).inflate(R.layout.pop_layout, null);
//设置三个要素
popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setContentView(inflate);
//设置空白处点击取消
popupWindow.setOutsideTouchable(true);
//设置出现的位置
popupWindow.showAsDropDown(btnButton,400,400);
}
});
}
}
效果展示
注意事项
首先,窗口相当于是一个布局,所有必须先写一个布局。
其次,必要的三个属性必不可少,高度,宽度,内容加载。