package com.bawei.day2_popupwindowdemo;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.app.ActionBar;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private TextView contextMenu;
private TextView popupMenuTv;
private TextView popupWindowTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
popupMenuTv = findViewById(R.id.popupMenuTv);
contextMenu = findViewById(R.id.contextMenu);
popupWindowTv = findViewById(R.id.popupWindowTv);
//注册上下文菜单,不需要额外添加长按属性,只要注册就可以默认添加一个
registerForContextMenu(contextMenu);
popupMenuTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showPopupMenu();
}
});
popupWindowTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showPopupWindow();
}
});
}
//显示popupWindows的方法
private void showPopupWindow(){
//创建对象
PopupWindow popupWindow = new PopupWindow(this);
//添加属性
View inflate = View.inflate(this, R.layout.popup, null);
Button cancel = inflate.findViewById(R.id.cancel);
Button ok = inflate.findViewById(R.id.ok);
//取消
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "点击了取消", Toast.LENGTH_SHORT).show();
popupWindow.dismiss();
}
});
//确认
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "点击了确认", Toast.LENGTH_SHORT).show();
popupWindow.dismiss();
}
});
//设置高
popupWindow.setHeight(ActionBar.LayoutParams.WRAP_CONTENT);
//设置宽
popupWindow.setWidth(ActionBar.LayoutParams.MATCH_PARENT);
//设置内容
popupWindow.setContentView(inflate);
//设置外部是否点击
popupWindow.setOutsideTouchable(true);
//设置popupWindow的圆角样式
popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.shape));
//设置弹窗半透明
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();//拿到窗体的属性
layoutParams.alpha = 0.5f;//修改透明度
getWindow().setAttributes(layoutParams);
//关闭窗体的时候,透明度恢复
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.alpha = 1f;
getWindow().setAttributes(layoutParams);
}
});
//引用出场入场动画
popupWindow.setAnimationStyle(R.style.mypop);
//弹出
popupWindow.showAtLocation(popupWindowTv,Gravity.BOTTOM,0,0);
}
//显示popupMenu的方法
private void showPopupMenu(){
//实例化popupMenu对象 引用popupMenuTv在哪弹出
PopupMenu popupMenu = new PopupMenu(this, popupMenuTv);
//引入布局
popupMenu.inflate(R.menu.menu);
//添加监听事件
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
int itemId = menuItem.getItemId();
switch (itemId){
case R.id.red:
Toast.makeText(MainActivity.this, "选择了红色", Toast.LENGTH_SHORT).show();
break;
case R.id.green:
Toast.makeText(MainActivity.this, "选择了绿色", Toast.LENGTH_SHORT).show();
break;
case R.id.blue:
Toast.makeText(MainActivity.this, "选择了蓝色", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return false;
}
});
//显示
popupMenu.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//2个参数,第一个是xml文件,第二个方法参数
getMenuInflater().inflate(R.menu.menu,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
final int itemId = item.getItemId();//拿到id才能去做其他的操作
switch (itemId){
case R.id.red:
Toast.makeText(this, "选择了红色", Toast.LENGTH_SHORT).show();
break;
case R.id.green:
Toast.makeText(this, "选择了绿色", Toast.LENGTH_SHORT).show();
break;
case R.id.blue:
Toast.makeText(this, "选择了蓝色", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@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) {
final int itemId = item.getItemId();//拿到id才能去做其他的操作
switch (itemId){
case R.id.red:
Toast.makeText(this, "选择了红色", Toast.LENGTH_SHORT).show();
break;
case R.id.green:
Toast.makeText(this, "选择了绿色", Toast.LENGTH_SHORT).show();
break;
case R.id.blue:
Toast.makeText(this, "选择了蓝色", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
07-13
1551
03-12
1万+