java popupwindow_PopupWindow 使用详解

本文深入解析了Android中的PopupWindow,包括它的继承结构、使用方法和如何创建底部PopupWindow。通过实例展示了如何初始化、设置点击事件以及展示PopupWindow。文章还提供了PopupWindow布局的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1c272b63e1e098ac69ab49e1a813b1d3.gif

ba8afdf34987c559ea2180385838c830.png

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

PopupWindow 继承关系

PopupWindow 使用方法

PopupWindow 底部PopupWindow的实现

PopupWindow 是一个可以在Activity之上显示任意View的控件。在Android经常使用,效果跟Dialog效果类似,不同点在于可以控制显示的位置,比如底部显示等。

1. PopupWindow简介

PopupWindow继承关系如下:

java.lang.Object

android.widget.PopupWindow

2. 使用方法

主要是调用PopWindow的构造方法,通过LayoutInflater 将Layout转换成View,然后将View 传递过去,既可以实现,具体可以参考PopupWindow 源码,源码路径如下:framework/base/core/java/android/widget/PopupWindow.java

79d92c887a34660b46d734d9db7de2ad.png

3. 底部PopupWindow的实现

PopupWindow实现效果

be6326326d4e7951934253de60cbc069.png

PopWindow 实现类

public class PopWindowMethods extends Activity {

private View mPopView;

private PopupWindow mPopupWindow;

private Button btn_pop_ok;

private Button btn_pop_cancel;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_popwindow);

InitPopWindow();

InitView();

InitClick();

}

/**

*

*/

private void InitClick() {

// TODO Auto-generated method stub

btn_pop_ok.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Toast.makeText(getApplicationContext(), "ok", 0).show();

}

});

btn_pop_cancel.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Toast.makeText(getApplicationContext(), "cancel", 0).show();

}

});

}

/**

*

*/

private void InitPopWindow() {

// TODO Auto-generated method stub

// 将布局文件转换成View对象,popupview 内容视图

mPopView = getLayoutInflater().inflate(R.layout.popwindow_layout, null);

// 将转换的View放置到 新建一个popuwindow对象中

mPopupWindow = new PopupWindow(mPopView,

LinearLayout.LayoutParams.WRAP_CONTENT,

LinearLayout.LayoutParams.WRAP_CONTENT);

// 点击popuwindow外让其消失

mPopupWindow.setOutsideTouchable(true);

// mpopupWindow.setBackgroundDrawable(background);

}

/**

*

*/

private void InitView() {

btn_pop_ok = (Button) mPopView.findViewById(R.id.btn_pop_ok);

btn_pop_cancel = (Button) mPopView.findViewById(R.id.btn_pop_cancel);

}

@SuppressLint("NewApi")

public void ShowPopWindow(View view) {

if (mPopupWindow.isShowing()) {

mPopupWindow.dismiss();

} else {

// 设置PopupWindow 显示的形式 底部或者下拉等

// 在某个位置显示

mPopupWindow.showAtLocation(mPopView, Gravity.BOTTOM, 0, 30);

// 作为下拉视图显示

// mPopupWindow.showAsDropDown(mPopView, Gravity.CENTER, 200, 300);

}

// Toast.makeText(

// getApplicationContext(),

// "Launcher:"

// + PackageUtils.isLauncherAPK(getApplicationContext(),

// "com.miui.home"),

// 0).show();

}

}

PopupWindow布局

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginLeft="16dp"

android:layout_marginRight="16dp"

android:layout_marginTop="16dp"

android:background="@drawable/popwindow_bg" >

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:gravity="center"

android:orientation="vertical" >

android:id="@+id/tv_pop_tittle"

android:layout_width="match_parent"

android:layout_height="45dp"

android:gravity="center"

android:text="PopWindow Tittle" />

android:id="@+id/tv_pop_content"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="left|center_horizontal"

android:padding="20dp"

android:text="是否要退出Popwindows ? " />

android:layout_width="match_parent"

android:layout_height="1dp"

android:layout_margin="3dp"

android:background="@color/white_line" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal" >

android:id="@+id/btn_pop_ok"

android:layout_width="0dp"

android:layout_height="45dp"

android:layout_marginBottom="10dp"

android:layout_marginLeft="10dp"

android:layout_marginTop="10dp"

android:layout_weight="1"

android:background="@drawable/custom_btn_white_selector"

android:gravity="center"

android:text="OK" />

android:id="@+id/btn_pop_cancel"

android:layout_width="0dp"

android:layout_height="45dp"

android:layout_margin="10dp"

android:layout_marginBottom="10dp"

android:layout_marginRight="10dp"

android:layout_marginTop="10dp"

android:layout_weight="1"

android:background="@drawable/custom_btn_white_selector"

android:gravity="center"

android:text="Cancel" />

至此、PopWindow 的使用方法基本结束。

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

aba4929e4e0f8549c3e36b1e83af9525.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值