Android中 Popwindow的使用
16lz
2021-01-23
1.使用 popwindow实现如下效果:
2.代码如下:MainActivity.java
[java] view plain copy print ?
- packagemtpop.window.main;
- importandroid.app.Activity;
- importandroid.content.Context;
- importandroid.content.res.Resources;
- importandroid.os.Bundle;
- importandroid.view.Gravity;
- importandroid.view.LayoutInflater;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.view.ViewGroup.LayoutParams;
- importandroid.widget.Button;
- importandroid.widget.LinearLayout;
- importandroid.widget.PopupWindow;
- importandroid.widget.PopupWindow.OnDismissListener;
- importandroid.widget.TextView;
- publicclassMainActivityextendsActivity
- {
- privatestaticfinalStringTAG="MainActivity";
- privateButtonbutton;
- @Override
- publicvoidonCreate(BundlesavedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- button=(Button)findViewById(R.id.button);
- button.setOnClickListener(newOnClickListener()
- {
- @Override
- publicvoidonClick(Viewv)
- {
- //显示popupWindow
- PopupWindowpopupWindow=makePopupWindow(MainActivity.this);
- int[]xy=newint[2];
- button.getLocationOnScreen(xy);
- popupWindow.showAtLocation(button,Gravity.RIGHT|Gravity.TOP,-xy[0]/2,xy[1]+button.getWidth());
- //popupWindow.showAsDropDown(button,0,0);
- }
- });
- }
- //创建一个包含自定义view的PopupWindow
- privatePopupWindowmakePopupWindow(Contextcx)
- {
- PopupWindowwindow;
- window=newPopupWindow(cx);
- //ViewcontentView=LayoutInflater.from(this).inflate(R.layout.popwindow,null);
- //window.setContentView(contentView);
- Buttonb1=newButton(this);
- b1.setText("first");
- b1.setLayoutParams(newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
- Buttonb2=newButton(this);
- b2.setText("Second");
- b2.setLayoutParams(newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
- LinearLayoutlinearLayout=newLinearLayout(this);
- linearLayout.addView(b1);
- linearLayout.addView(b2);
- linearLayout.setOrientation(LinearLayout.VERTICAL);
- window.setContentView(linearLayout);
- window.setBackgroundDrawable(getResources().getDrawable(R.drawable.pop_bg));
- window.setWidth(DisplayManager.dipToPixel(150));
- window.setHeight(DisplayManager.dipToPixel(150));
- //设置PopupWindow外部区域是否可触摸
- window.setFocusable(true);//设置PopupWindow可获得焦点
- window.setTouchable(true);//设置PopupWindow可触摸
- window.setOutsideTouchable(true);//设置非PopupWindow区域可触摸
- returnwindow;
- }
- }
package mtpop.window.main;import android.app.Activity;import android.content.Context;import android.content.res.Resources;import android.os.Bundle;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.LinearLayout;import android.widget.PopupWindow;import android.widget.PopupWindow.OnDismissListener;import android.widget.TextView;public class MainActivity extends Activity{private static final String TAG = "MainActivity";private Button button;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);button = (Button) findViewById(R.id.button);button.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// 显示 popupWindowPopupWindow popupWindow = makePopupWindow(MainActivity.this);int[] xy = new int[2];button.getLocationOnScreen(xy);popupWindow.showAtLocation(button,Gravity.RIGHT|Gravity.TOP,-xy[0]/2,xy[1]+button.getWidth());//popupWindow.showAsDropDown(button,0, 0);}});}// 创建一个包含自定义view的PopupWindowprivate PopupWindow makePopupWindow(Context cx){PopupWindow window;window = new PopupWindow(cx);//View contentView = LayoutInflater.from(this).inflate(R.layout.popwindow, null);//window.setContentView(contentView);Button b1 = new Button(this);b1.setText("first");b1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));Button b2 = new Button(this);b2.setText("Second");b2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));LinearLayout linearLayout = new LinearLayout(this);linearLayout.addView(b1);linearLayout.addView(b2);linearLayout.setOrientation(LinearLayout.VERTICAL);window.setContentView(linearLayout);window.setBackgroundDrawable(getResources().getDrawable(R.drawable.pop_bg));window.setWidth(DisplayManager.dipToPixel(150));window.setHeight(DisplayManager.dipToPixel(150));// 设置PopupWindow外部区域是否可触摸window.setFocusable(true); //设置PopupWindow可获得焦点window.setTouchable(true); //设置PopupWindow可触摸window.setOutsideTouchable(true); //设置非PopupWindow区域可触摸return window;}}
3. main.xml [html] view plain copy print ?
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical">
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@android:color/darker_gray"
- android:orientation="horizontal">
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="Title"/>
- <Button
- android:id="@+id/button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="click"/>
- </LinearLayout>
- </LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:color/darker_gray" android:orientation="horizontal" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Title" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="click" /> </LinearLayout></LinearLayout>
注意:
*新建一个popupWindow弹出框popupWindow是一个阻塞式的弹出框,这就意味着在我们退出这个弹出框之前,程序会一直等待,
*这和AlertDialog不同哦,AlertDialog是非阻塞式弹出框,AlertDialog弹出的时候,后台可是还可以做其他事情的哦。 *
******************************************************************
1.PopupWindow的隐藏
[java] view plain copy print ?
- finalPopupWindowwindow=mPageStatWin;
- if(null!=window&&window.isShowing()){
- win.dismiss();
- }
final PopupWindow window = mPageStatWin;if(null != window && window.isShowing()) { win.dismiss();}
2.Popupwindow的显示及位置设置
window.showAtLocation(parent, Gravity.RIGHT | Gravity.BOTTOM, 10,10);
第一个参数指定PopupWindow的锚点view,即依附在哪个view上。
第二个参数指定起始点为parent的右下角,第三个参数设置以parent的右下角为原点,向左、上各偏移10像素。
//将PopupWindow作为anchor的下拉窗口显示。即在anchor的左下角显示
window. showAsDropDown (anchor ) ;
//xoff,yoff基于anchor的左下角进行偏移。
window. showAsDropDown (anchor, xoff, yoff ) ; 如果没有充足的空间显示PopupWindow,那么PopupWindow的左下角将位于anchor的左上角来显示。
*popupWindow.showAsDropDown(Viewview)弹出对话框,位置在紧挨着view组件
*showAsDropDown(Viewanchor,intxoff,intyoff)弹出对话框,位置在紧挨着view组件,xy代表着偏移量
*showAtLocation(Viewparent,intgravity,intx,inty)弹出对话框
*parent父布局gravity依靠父布局的位置如Gravity.CENTERxy坐标值
- window.setWidth(DisplayManager.dipToPixel(150));
- window.setHeight(DisplayManager.dipToPixel(150));
- //设置PopupWindow外部区域是否可触摸
- window.setFocusable(true);//设置PopupWindow可获得焦点
- window.setTouchable(true);//设置PopupWindow可触摸
- window.setOutsideTouchable(true);//设置非PopupWindow区域可触摸
window.setWidth(DisplayManager.dipToPixel(150));window.setHeight(DisplayManager.dipToPixel(150));// 设置PopupWindow外部区域是否可触摸window.setFocusable(true); //设置PopupWindow可获得焦点window.setTouchable(true); //设置PopupWindow可触摸window.setOutsideTouchable(true); //设置非PopupWindow区域可触摸设置其可以获得焦点,可触摸,外部区域可触摸(很重要)
更多相关文章
- Android通过基站获取地理位置
- edittext获取焦点并弹出软键盘
- Android 铃声设置界面,起始位置为当前已选项
- android Edittext焦点获取和清除
- MTK平台修改音量默认值需要改动的位置
- 如何在Android 11 中正确请求位置权限?以及Android 8 - 11位置权
- Android中PopupWindow的用法(位置、动画、焦点)
- Android中利用SpannableString实现点击同一按钮(Button)不同位置
- Android 记住listView的位置