Android使用Activity实现从底部弹出菜单或窗口的方法
本文实例讲述了android使用activity实现从底部弹出菜单或窗口的方法。分享给大家供大家参考,具体如下:
这里使用activity实现弹出滑动窗口或菜单,主要是使用了一些设置activity的样式来实现弹出窗口和滑动效果,实现如下:
第一步:设计要弹出窗口的xml布局:
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="vertical" > <linearlayout android:id="@+id/pop_layout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="vertical" android:layout_alignparentbottom="true" android:background="@drawable/btn_style_alert_dialog_background" > <button android:id="@+id/btn_take_photo" android:layout_marginleft="20dip" android:layout_marginright="20dip" android:layout_margintop="20dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="拍照" android:background="@drawable/btn_style_alert_dialog_button" android:textstyle="bold" /> <button android:id="@+id/btn_pick_photo" android:layout_marginleft="20dip" android:layout_marginright="20dip" android:layout_margintop="5dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="从相册选择" android:background="@drawable/btn_style_alert_dialog_button" android:textstyle="bold" /> <button android:id="@+id/btn_cancel" android:layout_marginleft="20dip" android:layout_marginright="20dip" android:layout_margintop="15dip" android:layout_marginbottom="15dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="取消" android:background="@drawable/btn_style_alert_dialog_cancel" android:textcolor="#ffffff" android:textstyle="bold" /> </linearlayout> </relativelayout>
第二步:创建selectpicpopupwindow类继承activity类并实现onclicklistener接口(可以不用在这里实现这个借口,根据自己需要和方便实现),其他代码实现跟编写常规activity一样就ok,如下:
import android.app.activity; import android.os.bundle; import android.view.motionevent; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.linearlayout; import android.widget.toast; public class selectpicpopupwindow extends activity implements onclicklistener{ private button btn_take_photo, btn_pick_photo, btn_cancel; private linearlayout layout; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.alert_dialog); btn_take_photo = (button) this.findviewbyid(r.id.btn_take_photo); btn_pick_photo = (button) this.findviewbyid(r.id.btn_pick_photo); btn_cancel = (button) this.findviewbyid(r.id.btn_cancel); layout=(linearlayout)findviewbyid(r.id.pop_layout); //添加选择窗口范围监听可以优先获取触点,即不再执行ontouchevent()函数,点击其他地方时执行ontouchevent()函数销毁activity layout.setonclicklistener(new onclicklistener() { public void onclick(view v) { // todo auto-generated method stub toast.maketext(getapplicationcontext(), "提示:点击窗口外部关闭窗口!", toast.length_short).show(); } }); //添加按钮监听 btn_cancel.setonclicklistener(this); btn_pick_photo.setonclicklistener(this); btn_take_photo.setonclicklistener(this); } //实现ontouchevent触屏函数但点击屏幕时销毁本activity @override public boolean ontouchevent(motionevent event){ finish(); return true; } public void onclick(view v) { switch (v.getid()) { case r.id.btn_take_photo: break; case r.id.btn_pick_photo: break; case r.id.btn_cancel: break; default: break; } finish(); } }
第三步:编写mainactivity类,这里很简单就是点击启动刚才要实现窗口的mainactivity即可:
import android.app.activity; import android.content.intent; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; import android.widget.textview; public class mainactivity extends activity { @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); textview tv = (textview) this.findviewbyid(r.id.text); //把文字控件添加监听,点击弹出自定义窗口 tv.setonclicklistener(new onclicklistener() { public void onclick(view v) { startactivity(new intent(mainactivity.this,selectpicpopupwindow.class)); } }); } }
第四步:这里要注意下androidmanifest.xml对selectpicpopupwindow的配置跟常规的不一样为该activity改添加android:theme属性,如下:
第五步:这一步是实现本实例最重要的一部就是设置android:theme属性样式以实现本例所需要的效果,如下:
<style name="animbottom" parent="@android:style/animation"> <item name="android:windowenteranimation">@anim/push_bottom_in</item> <item name="android:windowexitanimation">@anim/push_bottom_out</item> </style> <style name="mydialogstylebottom" parent="android:theme.dialog"> <item name="android:windowanimationstyle">@style/animbottom</item> <item name="android:windowframe">@null</item> ;!-- 边框 --> <item name="android:windowisfloating">true</item> ;!-- 是否浮现在activity之上 --> <item name="android:windowistranslucent">true</item> ;!-- 半透明 --> <item name="android:windownotitle">true</item> ;!-- 无标题 --> <item name="android:windowbackground">@android:color/transparent</item> ;!-- 背景透明 --> <item name="android:backgrounddimenabled">true</item> ;!-- 模糊 --> </style>
第六步:在贴出弹出和销毁时的动画效果代码:
push_bottom_in.xml
<?xml version="1.0" encoding="utf-8"?> <!-- 上下滑入式 --> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="200" android:fromydelta="100%p" android:toydelta="0" /> </set>
push_buttom_out.xml
<?xml version="1.0" encoding="utf-8"?> <!-- 上下滑出式 --> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="200" android:fromydelta="0" android:toydelta="50%p" /> </set>
注意:这两个xml需要放在res/anim的anim文件夹下
第七步;运行效果如图:
安卓4.0的手机测试时滑出的的窗口可能与整个屏幕两侧会有间隙
如果要让此界面的宽度撑满整个屏幕,可以在
setcontentview(r.layout.activity_main);
之后加上
更多关于android相关内容感兴趣的读者可查看本站专题:《android编程之activity操作技巧总结》、《android开发入门与进阶教程》、《android资源操作技巧汇总》、《android数据库操作技巧总结》、《android视图view技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
下一篇: python实现人民币大写转换