目录
前言:
1.浮窗显示在控件底部:
2.初始化
3.浮窗在按钮下面d出:
4.浮窗在按钮右边d出
5.浮窗从按钮左边d出:
6.MainActivity:完整代码:
7.布局代码:
8.底部d框代码:
9.左右d框代码:
10.实现的效果如下:
11.最后项目的源码如下:
前言:
最近做首页新手引导改版需要显示一个在控件下面的d框,由于之前的同事使用的是FramLayout以addview的方式实现的,发现很不好扩展,修改控件位置及其他需求比较麻烦,于是决定用PopupWindow重新写,直接上代码:
1.浮窗显示在控件底部:调用showAsDropDown()方法,源码翻译出来大致意思就是显示固定位置的视图
2.初始化Button btnSave, btnClear; TextView textView; ConstraintLayout cl_root; PopupWindow mPopupWindow; List3.浮窗在按钮下面d出:detailModelList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initListener(); } private void initData() { detailModelList = new ArrayList<>(); for (int i = 0; i < 10; i++) { VideoDetailModel detailModel = new VideoDetailModel(); detailModel.setTitle("S1 与 Vision+ S1 App 的连接S1"); detailModel.setPoint("01:10"); detailModelList.add(detailModel); } } private void initView() { btnSave = findViewById(R.id.btn_save); btnClear = findViewById(R.id.btn_clear); cl_root = findViewById(R.id.cl_root); }
btnBottom.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPopupWindow = new TipPopupWinDow(MainActivity.this, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); //浮框在按钮下面 showPopUpWindow(v); setBackgroundAlpha(MainActivity.this, 0.6f); } });
private void showPopUpWindow(View v) { mPopupWindow.showAsDropDown(v); mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { setBackgroundAlpha(MainActivity.this, 1.0f); } }); }4.浮窗在按钮右边d出
btnRight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //浮框在右边 FullVideoPopupWindow fullVideoPopupWindow = new FullVideoPopupWindow(MainActivity.this,detailModelList,ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); fullVideoPopupWindow.showAtLocation(v, RIGHT,0, 0); } });5.浮窗从按钮左边d出:
btnLeft.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //浮框在左边 FullVideoPopupWindow fullVideoPopupWindow = new FullVideoPopupWindow(MainActivity.this, detailModelList, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); fullVideoPopupWindow.showAtLocation(v, Gravity.START,0, 0); } });6.MainActivity:完整代码:
public class MainActivity extends AppCompatActivity { Button btnBottom,btnLeft, btnRight; ConstraintLayout cl_root; PopupWindow mPopupWindow; List7.布局代码:detailModelList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initListener(); } private void initData() { detailModelList = new ArrayList<>(); for (int i = 0; i < 10; i++) { VideoDetailModel detailModel = new VideoDetailModel(); detailModel.setTitle("S1 与 Vision+ S1 App 的连接S1"); detailModel.setPoint("01:10"); detailModelList.add(detailModel); } } private void initView() { btnBottom = findViewById(R.id.btn_bottom); btnLeft = findViewById(R.id.btn_left); btnRight = findViewById(R.id.btn_right); cl_root = findViewById(R.id.cl_root); } private void initListener() { btnLeft.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //浮框在左边 FullVideoPopupWindow fullVideoPopupWindow = new FullVideoPopupWindow(MainActivity.this, detailModelList, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); fullVideoPopupWindow.showAtLocation(v, Gravity.START,0, 0); } }); btnBottom.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPopupWindow = new TipPopupWinDow(MainActivity.this, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); //浮框在按钮下面 showPopUpWindow(v); setBackgroundAlpha(MainActivity.this, 0.6f); } }); btnRight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //浮框在右边 FullVideoPopupWindow fullVideoPopupWindow = new FullVideoPopupWindow(MainActivity.this,detailModelList,ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); fullVideoPopupWindow.showAtLocation(v, RIGHT,0, 0); } }); } public static void setBackgroundAlpha(AppCompatActivity activity, float bgAlpha) { WindowManager.LayoutParams lp = activity.getWindow() .getAttributes(); lp.alpha = bgAlpha; (activity).getWindow().setAttributes(lp); } private void showPopUpWindow(View v) { mPopupWindow.showAsDropDown(v); mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { setBackgroundAlpha(MainActivity.this, 1.0f); } }); } }
8.底部d框代码:
/** * @author: njb * @date: 2022/2/17 14:53 * @desc: 引导d框 */ public class TipPopupWinDow extends PopupWindow { private View view; FrameLayout flTip; public TipPopupWinDow(Activity context,int width, int height, boolean focusable){ view = LayoutInflater.from(context).inflate(R.layout.layout_tip_popup_window, null); flTip = view.findViewById(R.id.fl_tip); setContentView(view); setTouchable(true); setHeight(height); setWidth(width); setOutsideTouchable(true); initView(); } private void initView() { flTip.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TipPopupWinDow.this.dismiss(); } }); } }9.左右d框代码:
/** * @author: njb * @date: 2022/3/14 17:39 * @desc: 描述 */ public class FullVideoPopupWindow extends PopupWindow { private List10.实现的效果如下: 11.最后项目的源码如下:videoDetails; private RecyclerView recyclerView; private FullVideoDetailAdapter fullVideoDetailAdapter; private Activity context; private View view; private LinearLayoutManager centerLayoutManager; private ConstraintLayout clVideo; public FullVideoPopupWindow(@NonNull Activity context, List videoDetails,int width,int height) { super(context); this.context = context; this.videoDetails = videoDetails; view = LayoutInflater.from(context).inflate(R.layout.popup_full_video, null); setContentView(view); this.setBackgroundDrawable(null); setWidth(width); setHeight(height); setOutsideTouchable(true); setTouchable(true); initView(); } private void initView() { recyclerView = view.findViewById(R.id.rv_full_video); clVideo = view.findViewById(R.id.cl_full_root); fullVideoDetailAdapter = new FullVideoDetailAdapter(context,videoDetails); centerLayoutManager = new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false); recyclerView.setLayoutManager(new LinearLayoutManager(context)); recyclerView.setAdapter(fullVideoDetailAdapter); clVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FullVideoPopupWindow.this.dismiss(); } }); } }
PopupWindowDemo: PopUpWindow的简单使用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)