当前位置: 移动技术网 > IT编程>移动开发>Android > Android使用Activity实现从底部弹出菜单或窗口的方法

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

童装加盟政策,娟子的彪悍爱情txt,云蚂蚁官网

本文实例讲述了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文件夹下

第七步;运行效果如图:

安卓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程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网