AI智能
改变未来

Android – popWindow简单使用


效果

点击控件,弹出窗口;再次点击控件,窗口消失;
点击按钮一,吐丝,窗口消失;
点击按钮二、三,吐丝,窗口不消失;
点击外部,窗口消失;

设置多一个布局 – – 窗口的布局
相关代码解释,在注释里有写

activity_main.xml

<TextViewandroid:layout_width=\"wrap_content\"android:layout_height=\"wrap_content\"android:textSize=\"25dp\"android:text=\"popWindow\"android:padding=\"10dp\"android:id=\"@+id/tv_popWindow\"/>

activity_popwindow.xml

<Buttonandroid:layout_width=\"match_parent\"android:layout_height=\"wrap_content\"android:padding=\"10dp\"android:text=\"按钮一\"android:id=\"@+id/bt_one\"/><Buttonandroid:layout_width=\"match_parent\"android:layout_height=\"wrap_content\"android:padding=\"10dp\"android:text=\"按钮二\"android:id=\"@+id/bt_two\"/><Buttonandroid:layout_width=\"match_parent\"android:layout_height=\"wrap_content\"android:padding=\"10dp\"android:text=\"按钮三\"android:id=\"@+id/bt_three\"/>

MainActivity.java

//控件,点击弹出窗口tv = findViewById(R.id.tv_popWindow);tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//窗口popWindow();}});
private PopupWindow mPopWindow;private void popWindow() {//利用 LayoutInflater获取 R.layout.activity_popwindow 对应的 ViewView contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_popwindow, null);mPopWindow = new PopupWindow(contentView);/** 设置窗体的长和宽* 代码强制设置 PopupWindow的 Height、Width(否则无法显示出来)* popupWindow的宽和高, 以这里代码设置的为准* */mPopWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);mPopWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);//充满//        mPopWindow.setWidth(ViewGroup.LayoutParams.FILL_PARENT);//        mPopWindow.setHeight(ViewGroup.LayoutParams.FILL_PARENT);//设置动画所对应的style//        mPopWindow.setAnimationStyle(R.style.contextMenuAnim);/** 外部点击, 隐藏窗体的功能(三种方法)* *///1. 设置再次点击控件的时候,关闭窗口,不重新打开mPopWindow.setFocusable(true);//2.//        mPopWindow.setOutsideTouchable(true);//3.//        ColorDrawable dw = new ColorDrawable(0x00000000);//        mPopWindow.setBackgroundDrawable(dw);/** 设置窗体在控件的相对位置* */// 显示在某个控件的正左下方,无偏移mPopWindow.showAsDropDown(tv);// 相对某个控件的位置,有偏移,xoff为 X轴的偏移量,yoff为 Y轴的偏移量//        mPopWindow.showAsDropDown(tv, 0, 0);//相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移//        mPopWindow.showAtLocation(tv, Gravity.BOTTOM, 10, 30);Button bt_one = contentView.findViewById(R.id.bt_one);bt_one.setOnClickListener(this);Button bt_two = contentView.findViewById(R.id.bt_two);bt_two.setOnClickListener(this);Button bt_three = contentView.findViewById(R.id.bt_three);bt_three.setOnClickListener(this);}
//点击按钮,吐丝@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.bt_one:Toast.makeText(this, \"你点击了按钮一\", Toast.LENGTH_SHORT).show();//窗体消失mPopWindow.dismiss();break;case R.id.bt_two:Toast.makeText(this, \"你点击了按钮二\", Toast.LENGTH_SHORT).show();break;case R.id.bt_three:Toast.makeText(this, \"你点击了按钮三\", Toast.LENGTH_SHORT).show();break;}}

完整代码(MainActivity.java)

public class MainActivity extends AppCompatActivity implements View.OnClickListener{TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = findViewById(R.id.tv_popWindow);tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {popWindow();}});}private PopupWindow mPopWindow;private void popWindow() {//利用 LayoutInflater获取 R.layout.activity_popwindow 对应的 ViewView contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_popwindow, null);mPopWindow = new PopupWindow(contentView);/** 设置窗体的长和宽* 代码强制设置 PopupWindow的 Height、Width(否则无法显示出来)* popupWindow的宽和高, 以这里代码设置的为准* */mPopWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);mPopWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);//充满//        mPopWindow.setWidth(ViewGroup.LayoutParams.FILL_PARENT);//        mPopWindow.setHeight(ViewGroup.LayoutParams.FILL_PARENT);//设置动画所对应的style//        mPopWindow.setAnimationStyle(R.style.contextMenuAnim);/** 外部点击, 隐藏窗体的功能(三种方法)* *///1. 设置再次点击控件的时候,关闭窗口,不重新打开mPopWindow.setFocusable(true);//2.//        mPopWindow.setOutsideTouchable(true);//3.//        ColorDrawable dw = new ColorDrawable(0x00000000);//        mPopWindow.setBackgroundDrawable(dw);/** 设置窗体在控件的相对位置* */// 显示在某个控件的正左下方,无偏移mPopWindow.showAsDropDown(tv);// 相对某个控件的位置,有偏移,xoff为 X轴的偏移量,yoff为 Y轴的偏移量//        mPopWindow.showAsDropDown(tv, 0, 0);//相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移//        mPopWindow.showAtLocation(tv, Gravity.BOTTOM, 10, 30);Button bt_one = contentView.findViewById(R.id.bt_one);bt_one.setOnClickListener(this);Button bt_two = contentView.findViewById(R.id.bt_two);bt_two.setOnClickListener(this);Button bt_three = contentView.findViewById(R.id.bt_three);bt_three.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.bt_one:Toast.makeText(this, \"你点击了按钮一\", Toast.LENGTH_SHORT).show();//窗体消失mPopWindow.dismiss();break;case R.id.bt_two:Toast.makeText(this, \"你点击了按钮二\", Toast.LENGTH_SHORT).show();break;case R.id.bt_three:Toast.makeText(this, \"你点击了按钮三\", Toast.LENGTH_SHORT).show();break;}}}

添加动画

Android – 简单动画

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Android – popWindow简单使用