對于自定義視窗,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>
效果:
這樣我們的界面就算完成了,下來我們來看一個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