对于自定义窗口,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