PopupWindow是安卓中常用的一个弹出框控件,可以用于显示一些自定义的视图,比如菜单、提示框、选择器等等。PopupWindow的使用非常灵活,但是在实际开发中,我们通常需要对其进行一些封装,以方便代码的复用和维护。本文将介绍如何对PopupWindow进行封装。
一、PopupWindow的基本使用
在使用PopupWindow之前,我们需要先创建一个布局文件,用于显示我们自定义的视图。比如我们可创建一个名为popup,window.xml的布局文件,其中包含一个TextView和一个Button。
```
安卓:layout,width=wrap,content
安卓:layout,height=wrap,content
安卓:orientation=vertical
安卓:padding=10dp>
安卓:id=@+id/tv,content
安卓:layout,width=match,parent
安卓:layout,height=wrap,content
安卓:text=这是一个PopupWindow
安卓:textSize=16sp />
安卓:id=@+id/btn,close
安卓:layout,width=match,parent
安卓:layout,height=wrap,content
安卓:text=关闭 />
```
下一步,我们在Activity中创建一个PopupWindow对象,并把它与我们刚才创建的布局文件相关联。
```
PopupWindow popupWindow = new PopupWindow(this);
View contentView = LayoutInflater.from(this).inflate(R.layout.popup,window, null);
popupWindow.setContentView(contentView);
```
然后我们可对PopupWindow进行一些基本的配置,比如设置宽高、背景、动画等等。
```
popupWindow.setWidth(ViewGroup.LayoutParams.WRAP,CONTENT);
popupWindow.setHeight(ViewGroup.LayoutParams.WRAP,CONTENT);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
popupWindow.setAnimationStyle(R.style.PopupAnimation);
```
最后,我们需如果要把PopupWindow显示出来。
```
popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
```
其中,view表示PopupWindow的锚点,Gravity表示PopupWindow显示的位置,0和0表示偏移量。
二、PopupWindow的封装
上面介绍了PopupWindow的基本使用方法,但是在实际开发中,我们通常需要对其进行封装。下面我们将介绍一种常常出现在大家视野里的PopupWindow封装方法。
1. 创建PopupWindowHelper类
首先,我们需要创建一个PopupWindowHelper类,用于对PopupWindow进行封装。该类中包含了PopupWindow的基本操作,比如创建、显示、关闭等等。
```
public class PopupWindowHelper {
private PopupWindow mPopupWindow;
public void createPopupWindow(Context context, int layoutResId) {
View contentView = LayoutInflater.from(context).inflate(layoutResId, null);
mPopupWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.WRAP,CONTENT, ViewGroup.LayoutParams.WRAP,CONTENT, true);
mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
mPopupWindow.setAnimationStyle(R.style.PopupAnimation);
}
public void showPopupWindow(View anchorView) {
if (mPopupWindow != null && !mPopupWindow.isShowing()) {
mPopupWindow.showAtLocation(anchorView, Gravity.CENTER, 0, 0);
}
}
public void dismissPopupWindow() {
if (mPopupWindow != null && mPopupWindow.isShowing()) {
mPopupWindow.dismiss();
}
}
}
```
2. 在Activity中使用PopupWindowHelper
下一步,我们可在Activity中使用PopupWindowHelper类,对PopupWindow进行操作。比如我们可在Activity中创建一个PopupWindowHelper对象,然后在需要显示PopupWindow的时候调用showPopupWindow方法。
```
public class MainActivity extends AppCompatActivity {
private PopupWindowHelper mPopupWindowHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity,main);
mPopupWindowHelper = new PopupWindowHelper();
mPopupWindowHelper.createPopupWindow(this, R.layout.popup,window);
Button button = findViewById(R.id.btn,show,popup,window);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPopupWindowHelper.showPopupWindow(v);
}
});
TextView textView = mPopupWindowHelper.getContentView().findViewById(R.id.tv,content);
textView.setText(这是一个封装后的PopupWindow);
}
@Override
protected void onDestroy() {
super.onDestroy();
mPopupWindowHelper.dismissPopupWindow();
}
}
```
其中,我们在Activity的onCreate方法中创建了一个PopupWindowHelper对象,并把它与我们刚才创建的布局文件相关联。然后我们可在需要显示PopupWindow的时候调用showPopupWindow方法,将PopupWindow显示出来。最后,在Activity的onDestroy方法中调用dismissPopupWindow方法,将PopupWindow关闭。
三、总结
本文介绍了PopupWindow的基本使用方法,并对其进行了封装。通过封装,我们可将PopupWindow的基本操作封装到一个类中,以方便代码的复用和维护。在实际开发中,我们可根据具体需求对PopupWindow进行更加灵活的封装。