天天看点

(Android)五分钟学会PopupWindow

对于自定义窗口,android提供了popupwindow,简单实用。

下面我们来看看:

popupwindow的构造函数

public popupwindow(view contentview, int width, int height, boolean focusable)

其中contentview为要显示的view,width和height为宽和高,值为像素值,可以是matcht_parent和wrap_content

来设置,如果focusable为false,在一个activity弹出一个popupwindow,按返回键,由于popupwindow没有焦点,会直接退出activity。如果focusable为true,popupwindow弹出后,所有的触屏和物理按键都有popupwindows处理。

如果popupwindow中有editor的话,focusable要为true。

下面来看一个简单的demo

主界面:就简单放一个button,点击弹出我们需要的popupwindow

[html] view plaincopyprint?

<relativelayoutxmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/container"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<button

android:id="@+id/btnopen"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerinparent="true"

android:text="@string/app_name"/>

</relativelayout>

popupwindow 界面:放了2个button 和一个文本框,用来输入值

<?xml version="1.0"encoding="utf-8"?>

android:layout_height="match_parent"

android:background="#b5555555">

<linearlayout

android:layout_alignparentbottom="true"

android:background="#eee"

android:orientation="vertical" >

<edittext

android:id="@+id/leaveword"

android:layout_width="fill_parent"

android:layout_marginbottom="20dp"

android:layout_marginleft="20dp"

android:layout_marginright="20dp"

android:layout_margintop="20dp"

android:gravity="top"

android:hint="说点什么吧~"

android:inputtype="textmultiline"

android:linespacingextra="6.0dp"

android:maxheight="150dp"

android:minheight="100dp"

android:paddingleft="10.0dp"

android:paddingright="10.0dp"

android:paddingtop="10.0dp" />

android:gravity="center"

android:orientation="horizontal">

android:id="@+id/confirmbutton"

android:layout_width="80.0dip"

android:text="发表"

android:textcolor="#fff"

android:textsize="16.0sp" />

android:id="@+id/canclebutton"

android:layout_marginleft="30dp"

android:text="取消"

android:textcolor="#565656"

</linearlayout>

效果:

(Android)五分钟学会PopupWindow

这样我们的界面就算完成了,下来我们来看一个activity。写个了openview 来弹出view

[java] view plaincopyprint?

public void openview() {

layoutinflater inflater = (layoutinflater) getsystemservice(layout_inflater_service);

popupwindowview = inflater.inflate(r.layout.popupwindow, null);

popupwindow = newpopupwindow(popupwindowview,

layoutparams.match_parent, layoutparams.match_parent,true);

// 设置popupwindow的弹出和消失效果

popupwindow.setanimationstyle(r.style.popupanimation);

btnsure = (button) popupwindowview.findviewbyid(r.id.confirmbutton);

btnsure.setonclicklistener(newbuttononclicklistener());

canclebutton = (button) popupwindowview.findviewbyid(r.id.canclebutton);

canclebutton.setonclicklistener(new buttononclicklistener());

leaveword = (edittext) popupwindowview.findviewbyid(r.id.leaveword);

popupwindow.showatlocation(btnsure, gravity.center, 0, 0);

}

我们看到弹出来的有点动画效果,是因为我们在弹出时,加上了

需要在styles.xml下加上

<style name="popupanimation"parent="android:animation">

<itemname="android:windowenteranimation">@anim/in</item>

<itemname="android:windowexitanimation">@anim/out</item>

lt;/style>

在 在工程res下新建anim文件夹,在anim文件夹先新建两个xml文件

in.xml

<setxmlns:android="http://schemas.android.com/apk/res/android" >

<translate

android:duration="1500"

android:fromydelta="5000"

android:toydelta="0" />

</set>

out.xml

<setxmlns:android="http://schemas.android.com/apk/res/android">

android:fromydelta="0"

android:toydelta="5000"

/>

如果想要关闭弹出框

调用popupwindow.dismiss();就好

这样一个简单的popupwindow例子就算完成了

public class mainactivity extendsactivity {

private view popupwindowview;

private popupwindow popupwindow;

private button btnsure, canclebutton, btnopen;

private edittext leaveword;

@override

protected void oncreate(bundle savedinstancestate) {

super.oncreate(savedinstancestate);

setcontentview(r.layout.activity_main);

btnopen = (button) findviewbyid(r.id.btnopen);

btnopen.setonclicklistener(newbuttononclicklistener());

private classbuttononclicklistenerimplements onclicklistener {

public void onclick(view vid) {

switch (vid.getid()) {

case r.id.btnopen:

openview();

break;

case r.id.confirmbutton:

toast.maketext(mainactivity.this, leaveword.gettext().tostring(), toast.length_short)

.show();

case r.id.canclebutton:

popupwindow.dismiss();

default:

https://mp.weixin.qq.com/s/azca5ehdapya7xsroc5fjq