PopupWindow的简单用法

简介: PopupWindow的简单用法

首先创建弹出框的布局

layout_popupwindow

<?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="#e96f6f"
    android:gravity="center"
    android:orientation="vertical">
 
    <TextView
        android:id="@+id/popwindow_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="弹出窗的标题" />
 
    <TextView
        android:id="@+id/popwindow_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="弹出窗的内容" />
</LinearLayout>


在Activity中点击按钮显示弹出框

btnShowWindow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //实例化弹窗布局
                View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.layout_popupwindow, null);
                //传入弹窗布局和宽高,创建popupwindow对象,
                PopupWindow popupWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.MATCH_PARENT, 500, true);
                //显示在按钮下面
                popupWindow.showAsDropDown(view, 100, 100);
            }
        });

显示在不同方向

使用showAtLocation(View parent,int gravity,int xoff,int yoff)确定位置

示例:在点击按钮的左

popupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);

第二个参数是方向。

第三个和第四个参数分别代表x和y轴的偏移距离。


如果要显示在任意的位置,方向传入Gravity.NO_GRAVITY即可。

示例:显示在按钮正上方

        //获取按钮的x和y坐标
        int[] location = new int[2];
        view.getLocationOnScreen(location);
        //弹窗的x轴不变,y轴减去弹窗自身的高度,刚好就在按钮上面了
        popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, location[0], location[1] - popupWindow.getHeight());

为popupwindow加入动画

很多应用的弹窗动画都是从下往上弹出来


在anim目录创建动画xml

anim_in

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromYDelta="100%"
        android:toYDelta="0" />
    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

在style中创建样式,设置windowEnterAnimation的值为动画xml

    <style name="window_anim_in">
        <!--显示布局的动画-->
        <item name="android:windowEnterAnimation">@anim/anim_in</item>
    </style>

给popupwindows设置此样式

popupWindow.setAnimationStyle(R.style.window_anim_in);

注意:必须在show方法之前设置,否则无效

相关文章
|
Android开发
Android 中SeekBar拖动条控件的基本用法
Android 中SeekBar拖动条控件的基本用法
140 0
Android 中SeekBar拖动条控件的基本用法
|
容器
PopupWindow(悬浮框)的基本使用
后一个用于显示信息的UI控件——PopupWindow(悬浮框),如果你想知道他长什么样子,你可以打开你手机的QQ,长按列表中的某项,这个时候后弹出一个黑色的小对话框,这种就是PopupWindow了,和AlertDialog对话框不同的是,他的位置可以是随意的; 另外AlertDialog是非堵塞线程的,而PopupWindow则是堵塞线程的!而官方有这样一句话来介绍PopupWindow: A popup window that can be used to display an arbitrary view. The popup window is a floating conta
152 0
ScrollView和HorizontalScrollView无法设置点击事件的源码解析
最近的开发过程中,发现存在ScrollView和HorizontalScrollView无法设置点击事件的现象。 我们知道,通常在设置点击事件时,位于View树上方的子View的OnClickListener,会优先于父View的OnClickListener执行。 开发过程中我们会经常使用类似的方式来给布局设置点击事件,比如给ListView的Item背景设置OnClickListener,用于点击item空白区域的跳转操作;然后再给item内部的子元素分别设置OnClickListener用于各自不同的点击操作。
SwipeRefreshLayout 嵌套ScrollView 滑动冲突
SwipeRefreshLayout 嵌套ScrollView 滑动冲突
232 0
|
Java Android开发
ViewStub用法
ViewStub用法
|
Java Android开发
NestedScrollView嵌套RecyclerView最后一条item显示不全
NestedScrollView嵌套RecyclerView最后一条item显示不全 首先要在最外层的NestedScrollView配置属性 android:fillViewport="true": 然后在上层Ja...
8171 0
|
Android开发
Android下拖动任意View代码(使用属性动画,眼前一亮)
mLocalFrameLayout.setOnTouchListener(new View.
1232 0
|
Android开发
Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow
 Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow 这本身是一个看似很简单的问题,但是如果设置不当,就可能导致莫名其妙失效问题。
1045 0
ScrollView嵌套EditText联带滑动的解决办法
本篇文章的相关内容需结合上文:从ScrollView嵌套EditText的滑动事件冲突分析触摸事件的分发机制以及TextView的简要实现和冲突的解决办法 在说完了如何解决ScrollView嵌套EditText的滑动事件冲突之后,我们接下来说一下如何实现它们两者之间的联带滑动。
1068 0