第二天Menu菜单和PopupWindow窗口
Menu菜单
1.系统菜单OptionsMenu
1.在res下面创建一个menu文件夹,并新建一个xml文件作为OptionMenu的布局文件
<?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">
<!--showAsAction属性:always总是 never 从不 ifroom 能显示就显示 默认是nerver-->
<item android:id="@+id/blue" android:title="蓝色" app:showAsAction="never" ></item>
<item android:id="@+id/red" android:title="红色" > </item>
<item android:id="@+id/green" android:title="绿色" ></item>
</menu>
2.Activity重写onCreateOptionsMenu加载资源文件
3.Activity重写onOptionsItemSelected加设置事件监听
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//静态添加 (在res文件夹下创建menu文件夹 menu文件夹下创建menu文件)
getMenuInflater().inflate(R.menu.menu_layout, menu);//加载menu.xml文件
// //动态添加
/**
*
* 第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮
* 第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。
* 第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
* 如果两个位置数值一样,那么先定义的拍前面。而且,groupid并不影响排列顺序。
* 第四个String类型的title参数,表示选项中显示的文字
*/
// menu.add(1, 1, 1, "11111");
// menu.add(1, 2, 3, "22222");
// menu.add(1, 3, 2, "33333");
// //子菜单
// SubMenu subMenu = menu.addSubMenu(1, 4, 6, "213124");
// subMenu.add(1, 5, 5, "14322242464");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
switch (itemId) {
case R.id.a1:
Toast.makeText(this, ""+item.getTitle(), Toast.LENGTH_SHORT).show();
break;
case R.id.a2:
Toast.makeText(this, ""+item.getTitle(), Toast.LENGTH_SHORT).show();
break;
case R.id.a3:
Toast.makeText(this, ""+item.getTitle(), Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
2.上下文菜单ContextMenu(长按出现)
步骤流程:
1.在res下面创建一个menu文件夹,并新建一个xml文件作为ContextMenu的布局文件
2.Activity重写onCreateConextMenu加载资源文件
3.Activity重写onConextItemSelected设置事件监听
4.为控件添加长按属性并将菜单绑定到这个控件上:registerForContextMenu(控件)
public class MainActivity extends AppCompatActivity {
private TextView hello;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hello = findViewById(R.id.hello);//初始化控件
registerForContextMenu(hello);//绑定
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.menu_layout, menu);//获取menu
}
@Override
public boolean onContextItemSelected(MenuItem item) {
int itemId = item.getItemId();
switch (itemId) {
case R.id.red:
hello.setTextColor(Color.parseColor("#ff0000"));
break;
case R.id.yellow:
hello.setTextColor(Color.parseColor("#FFEB3B"));
break;
}
return super.onContextItemSelected(item);
}
}
3.弹出菜单
实现流程:
步骤1:在res下面创建一个menu文件夹,并新建一个xml文件作为PoupMenu的布局文件。
步骤2:把PopupMenu相关逻辑封装到showPopupMenu()方法中,包含PopupMenu的实例化、布局设置、显示、添加MenuItem的点击监听及响应等
步骤3:为控件设置事件监听直接调用showPopupMenu()方法
xml
<?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/yellow" android:title="黄色" > </item >
</menu>
Java代码:
PopupMenu popupMenu = new PopupMenu(Main2Activity.this, btn);//创建popupMenu
popupMenu.inflate(R.menu.menu_layout);//获取布局文件
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {//popupMenu点击事件
@Override
public boolean onMenuItemClick(MenuItem item) {
switch(item.getItemId()){
case R.id.red:
btn.setTextColor(Color.parseColor("#990000"));
break;
case R.id.yellow:
btn.setTextColor(Color.parseColor("#FFEB3B"));
break;
}
return false;
}
});
popupMenu.show();//展示
4,PopupWindow
PopupWindow popupWindow = new PopupWindow(Main3Activity.this);//创建PopupWindow
View inflate = LayoutInflater.from(Main3Activity.this).inflate(R.layout.layout, null);//获取内容布局
popupWindow.setContentView(inflate);//加载布局文件
popupWindow.setHeight(300);//设置宽
popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);//设置高
popupWindow.setOutsideTouchable(true);//点击外部消失
//设置窗体的透明度
WindowManager.LayoutParams attributes = getWindow().getAttributes();
attributes.alpha = 0.5f;
getWindow().setAttributes(attributes);
//消失监听
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
WindowManager.LayoutParams attributes = getWindow().getAttributes();
attributes.alpha = 1.0f;
getWindow().setAttributes(attributes);
}
});
//第一种
// popupWindow.showAsDropDown(btn, 100, 100);
//第二种
View inflate1 = LayoutInflater.from(Main3Activity.this).inflate(R.layout.activity_main3, null);
popupWindow.showAtLocation(inflate1, Gravity.CENTER, 0, 0);
来源:CSDN
作者:weixin_45314961
链接:https://blog.csdn.net/weixin_45314961/article/details/103773064