android自定义PopWindow底部显示

本文介绍如何在Android应用中自定义PopWindow,作为对话框替代方案,详细讲解了PopWindow的特性、位置控制、控件监听以及处理手机虚拟按键对显示的影响。通过示例代码展示了如何创建并实现底部显示的PopWindow,同时讨论了点击PopWindow外部使其消失的处理方法。
摘要由CSDN通过智能技术生成

最近开发一款留言板手机客户端,需要到对话框来确认用户操作,但是系统自带的对话框很丑,不想用,所以就自定义PopWindow,想怎么显示就怎么显示,而且还方便添加显示动态,和背景图片。下面,我就来分享一下我的学习经验。
1、什么是popWindow?(1、2是博主网上找的)
popWindow就是对话框的一种方式!此文讲解的android中对话框的一种使用方式,它叫popWindow。
2、popWindow的特性
Android的对话框有两种:PopupWindow和Dialog。它们的不同点在于:
Dialog的位置固定,而PopupWindow的位置可以随意。
PopupWindow的位置按照有无偏移分,可以分为偏移和无偏移两种;按照参照物的不同,可以分为相对于某个控件(Anchor锚)和相对于父控件。具体如下
showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y):相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
3、PopWindow中控件的监听
PopWindow已经添加到布局中去了,那么问题来了,我要怎么通过自定义的控件来处理同级容器中的事件?其实很简单,博主在这里分享两种,第一种是通过接口:在PopWindow同级容器中实现自定义的相应接口,然后在传入到PopWindow对象中,在PopWindow对象中组件的监听事件中通过接口回调来实现控制;第二种方法就是:在继承于PopWindow的类中添加一个返回PopWindow布局的View的共有方法getPopWindowView(),在同级容器中定义PopWindow中控件的引用,然后将引用通过getPopWindowView().findViewById(R.id.xxx)指向相应的控件对象,最后在通过引用添加监听事件。
4、手机虚拟按键存在与否对底部滑出PopWindow的影响
当存在虚拟按键时候如果底部滑出相对于同级容器中的某个组件,则显示不完全,没有虚拟按键则不存在这种问题。怎么解决呢?其实很简单,只需要通过相对于父级容器位置来显示。即用showAtLocation(View parent, int gravity, int x, int y):相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等)。
5、点击PopWindow外部消失问题
在继承与PopWindow的类中必须实现setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT))这个方法来设置背景色才行,否则不行,当然我这里设置的全透明,只显示背景图片。

这里我就直接略过具体的PopWindow显示效果的xml文件了,直接上主要代码

一、MainActivity类:

package com.example.mypopwindowdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{
   

    private Button pop_under_button;
    private Button bottom_popwindow;
    private Button left,right;
    private View buttonPopView;
    private MyPopWindowBottomShow myPopWindowBottomShow;//屏幕底部popwindow
    private MyButtonPopwindow myButtonPopwindow;//按钮下popwindow
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pop_under_button = (Button) findViewById(R.id.pop_under_button);
        bottom_popwindow = (Button) findViewById(R.id.bottom_popwindow);
        pop_under_button.setOnClickListener(this);
        bottom_popwindow.setOnClickListener(this);
        myPopWindowBottomShow = 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值