欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android使用Activity实现从底部弹出菜单或窗口的方法

程序员文章站 2022-10-29 16:20:45
本文实例讲述了android使用activity实现从底部弹出菜单或窗口的方法。分享给大家供大家参考,具体如下: 这里使用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属性,如下:

复制代码 代码如下:
<activity android:name=".selectpicpopupwindow" android:theme="@style/mydialogstylebottom" />

第五步:这一步是实现本实例最重要的一部就是设置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文件夹下

第七步;运行效果如图:

Android使用Activity实现从底部弹出菜单或窗口的方法

安卓4.0的手机测试时滑出的的窗口可能与整个屏幕两侧会有间隙
如果要让此界面的宽度撑满整个屏幕,可以在

setcontentview(r.layout.activity_main);

之后加上

复制代码 代码如下:
getwindow().setlayout(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.wrap_content);

更多关于android相关内容感兴趣的读者可查看本站专题:《android编程之activity操作技巧总结》、《android开发入门与进阶教程》、《android资源操作技巧汇总》、《android数据库操作技巧总结》、《android视图view技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。