天天看點

(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