Android开发之PopupWindow实现弹窗效果

Karima ·
更新时间:2024-11-10
· 1206 次阅读

本文实例为大家分享了Android开发之PopupWindow实现弹窗的具体代码,供大家参考,具体内容如下

基本框架

activity_main.xml中设置一个按钮,用于唤出弹窗;

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical">     <Button         android:text="Popup"         android:onClick="Popup"         android:layout_width="wrap_content"         android:layout_height="wrap_content"/> </LinearLayout>

再编写一个Layout资源文件popup_view.xml用于弹窗:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:background="@mipmap/ic_launcher"     android:orientation="vertical">     <Button         android:id="@+id/btn1"         android:text="Button1"         android:layout_width="wrap_content"         android:layout_height="wrap_content"/>     <Button         android:id="@+id/btn2"         android:text="Button2"         android:layout_width="wrap_content"         android:layout_height="wrap_content"/> </LinearLayout>

MainActivity.java中编写按钮的点击事件,同样用View popup_view=getLayoutInflater().inflate(R.layout.popup_view,null);将上面编写的Layout资源转换成View,之后就可以新建一个弹窗并让其弹出。

package com.example.mypopupwindow; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.PopupWindow; public class MainActivity extends AppCompatActivity {     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);     }     public void Popup(View view) {         View popup_view=getLayoutInflater().inflate(R.layout.popup_view,null);         PopupWindow window=new PopupWindow(popup_view, ViewGroup.LayoutParams.WRAP_CONTENT                 ,ViewGroup.LayoutParams.WRAP_CONTENT);         window.showAsDropDown(view);     } }

点击按钮就会得到弹窗:

常用方法

setContentView(View contentView) 设置弹窗的View
showAsDropDown(View anchor) 弹窗的位置在控件的下方
showAsDropDown(View anchor,int xoff,int yoff) 相对某个控件的位置,有偏移
setFocusable(boolean focusable) 设置是否获取焦点
setBackgroundDrawable(Drawable background) 设置背景
dismiss() 关闭窗口
setAnimationStyle(int animationStyle) 设置加载动画(在学习了动画后再深入)
setTouchable(boolean touchable) 设置触摸使能
setOutsideTouchable(boolean touchable) 设置弹窗外面的触摸使能

实例

将focusable设置为true,就可以通过点击弹窗以外的地方关闭弹窗。

使用showAsDropDown(View anchor,int xoff,int yoff)就可以让弹窗有偏移:

使用window.setBackgroundDrawable(getResources().getDrawable(R.drawable.image));设置弹窗的图片背景:

对于弹窗中的两个按钮也可以设置监听,从而实现一些点击事件,在点击事件的结尾可以添加dismiss()函数使得点击后弹窗关闭。

package com.example.mypopupwindow; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.PopupWindow; public class MainActivity extends AppCompatActivity {     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);     }     public void Popup(View view) {         View popup_view=getLayoutInflater().inflate(R.layout.popup_view,null);         Button btn1=popup_view.findViewById(R.id.btn1);         Button btn2=popup_view.findViewById(R.id.btn2);         PopupWindow window=new PopupWindow(popup_view, ViewGroup.LayoutParams.WRAP_CONTENT                 ,ViewGroup.LayoutParams.WRAP_CONTENT,true);         window.setBackgroundDrawable(getResources().getDrawable(R.drawable.image));         window.showAsDropDown(view);         btn1.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 Log.e("ShadyPi","btn1");                 window.dismiss();             }         });         btn2.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 Log.e("ShadyPi","btn2");                 window.dismiss();             }         });     } }



弹窗 popupwindow android开发 Android

需要 登录 后方可回复, 如果你还没有账号请 注册新账号