首页 > 其他分享 >android popwindow实现左侧弹出菜…

android popwindow实现左侧弹出菜…

时间:2023-03-31 11:32:27浏览次数:40  
标签:popupWindow PopupWindow Button 弹出 popwindow android View view


http://www.apkbus.com/android-44903-1-1.html


学习一下PopupWindow的浮层显示效果。


PopupWindow可以实现浮层效果,主要方法有:可以自定义view,通过LayoutInflator方法;可以出现和退出时显示动画;可以指定显示位置等。

为了将PopupWindow的多个功能展现并力求用简单的代码实现,编写了一个点击按钮左侧弹出菜单的功能,实现出现和退出时显示动画效果并点击其他区域时弹出层自动消失,效果图如下:


图-1 android 实现左侧弹出菜单的功能

源码:

1.PopwindowOnLeftActivity.java

package com.pop.main;
 
 import android.app.Activity;
 import android.os.Bundle;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnTouchListener;
 import android.widget.Button;
 import android.widget.PopupWindow;
 
 public class PopwindowOnLeftActivity extends Activity {
 // 声明PopupWindow对象的引用
 private PopupWindow popupWindow;
 
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 // 点击按钮弹出菜单
 Button pop = (Button) findViewById(R.id.popBtn);
 pop.setOnClickListener(popClick);
 }
 //点击弹出左侧菜单的显示方式
 OnClickListener popClick = new OnClickListener() {
 
 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 getPopupWindow();
 // 这里是位置显示方式,在按钮的左下角
 popupWindow.showAsDropDown(v);
 // 这里可以尝试其它效果方式,如popupWindow.showAsDropDown(v,
 // (screenWidth-dialgoWidth)/2, 0);
 // popupWindow.showAtLocation(findViewById(R.id.layout),
 // Gravity.CENTER, 0, 0);
 }
 };
 
 
 protected void initPopuptWindow() {
 // TODO Auto-generated method stub
 
 // 获取自定义布局文件pop.xml的视图
 View popupWindow_view = getLayoutInflater().inflate(R.layout.pop, null,
 false);
 // 创建PopupWindow实例,200,150分别是宽度和高度
 popupWindow = new PopupWindow(popupWindow_view, 200, 150, true);
 // 设置动画效果
 popupWindow.setAnimationStyle(R.style.AnimationFade);
 //点击其他地方消失
 popupWindow_view.setOnTouchListener(new OnTouchListener() {
 @Override
 public boolean onTouch(View v, MotionEvent event) {
 // TODO Auto-generated method stub
 if (popupWindow != null && popupwindows.isShowing()) {
 popupWindow.dismiss();
 popupWindow = null;
 }
 return false;
 }
 });
 // pop.xml视图里面的控件
 Button open = (Button) popupWindow_view.findViewById(R.id.open);
 Button save = (Button) popupWindow_view.findViewById(R.id.save);
 Button close = (Button) popupWindow_view.findViewById(R.id.close);
 // pop.xml视图里面的控件触发的事件
 // 打开
 open.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 // 这里可以执行相关操作
 System.out.println("打开操作");
 // 对话框消失
 popupWindow.dismiss();
 }
 });
 // 保存
 save.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 // 这里可以执行相关操作
 System.out.println("保存操作");
 popupWindow.dismiss();
 }
 });
 // 关闭
 close.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 // 这里可以执行相关操作
 System.out.println("关闭操作");
 popupWindow.dismiss();
 }
 });
 
 }
 
 private void getPopupWindow() {
 
 if (null != popupWindow) {
 popupWindow.dismiss();
 return;
 } else {
 initPopuptWindow();
 }
 }
 }

复制代码

主要界面

2.main.xml

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" >
 <Button android:id="@+id/popBtn"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="@string/pop_left" />
 </LinearLayout>

复制代码

弹出层的布局

3.pop.xml

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:background="@android:color/darker_gray">
 <Button android:id="@+id/open"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:background="@drawable/btn"
 android:text="@string/open"/>
 <Button android:id="@+id/save"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:background="@drawable/btn"
 android:text="@string/save"/>
 <Button android:id="@+id/close"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:background="@drawable/btn"
 android:text="@string/close"/>
 </LinearLayout>

复制代码

value下的style文件

4.style

<?xml version="1.0" encoding="utf-8"?>
 <resources>
 <style name="AnimationFade">
  PopupWindow左右弹出的效果-->
 <item name="android:windowEnterAnimation">@anim/in_lefttoright</item>
 <item name="android:windowExitAnimation">@anim/out_righttoleft</item>
 </style>
 </resources>

复制代码

value下的string文件

5.string.xml

<?xml version="1.0" encoding="utf-8"?>
 <resources>
 <string name="hello">Hello World, PopwindowOnLeftActivity!</string>
 <string name="app_name">PopwindowOnLeft</string>
 <string name="pop_left">弹出左侧菜单</string>
 <string name="open">打开</string>
 <string name="save">保存</string>
 <string name="close">关闭</string>
 </resources>

复制代码

anim目录下的文件

出现时从左往右的动画文件

6.in_lefttoright.xml

<?xml version="1.0" encoding="utf-8"?>
 <set xmlns:android="http://schemas.android.com/apk/res/android">
 <!-- 定义从左向右进入的动画 -->
 <translate
 android:fromXDelta="-100%"
 android:toXDelta="0"
 android:duration="500"/>
 </set>

复制代码

退出时从右往左消失的动画

7.out_righttoleft.xml

<?xml version="1.0" encoding="utf-8"?>
 <set xmlns:android="http://schemas.android.com/apk/res/android">
 <!-- 定义从右向左动画退出动画 -->
 <translate
 android:fromXDelta="0"
 android:toXDelta="-100%"
 android:duration="500"/>
 </set>

复制代码


标签:popupWindow,PopupWindow,Button,弹出,popwindow,android,View,view
From: https://blog.51cto.com/u_548275/6161424

相关文章

  • Android NDK开发环境搭建
    必先利其器, 下面介绍下EclipseSDKNDKCygwinCDT 集成开发环境的搭建。1、Android 开发环境搭建Android开发环境搭建不是重点,相信看此文章的很多人都已经搭建成功,这里随便概述性的说说。1)     下载JDK2)     下载Eclipse3)     下载AndroidSDK4)  ......
  • android anr分析方法
    一:什么是ANRANR:ApplicationNotResponding,即应用无响应二:ANR的类型ANR一般有三种类型:1:KeyDispatchTimeout(5seconds)--主要类型按键或触摸事件在特定时间内无响应2:BroadcastTimeout(10seconds)BroadcastReceiver在特定时间内无法处理完成3:ServiceTimeout(20seconds)--小概率......
  • Android 4.0系统发布会全程精彩瞬间集锦
    10月19日上午10点,Google和三星联合在香港举办发布会,代号“冰激凌三明治”的新一代Android4.0系统终于揭开神秘面纱,首款搭载该系统的智能手机GalaxyNexus也惊艳亮相。尽管发布会只有短短的一个小时,Android用户体验总监MatiasDuarte的演讲水平也不可与乔布斯同日而语,但是总体来说,......
  • Android获取所在地城市名
    1.staticStringcityName="深圳";//城市名2.publicstaticStringcityName;//城市名3.4.privatestaticGeocodergeocoder;//此对象能通过经纬度来获取相应的城市等信息5.6.7.publicstaticvoidgetCNBylocation(Contex......
  • Android图片转换类 1. Bitmap去色,…
    publicclassImageTools{publicstaticBitmaptoGrayscale(BitmapbmpOriginal){intwidth,height;height=bmpOriginal.getHeight();width=bmpOriginal.getWidth();BitmapbmpGrayscale=Bitmap.createBitmap(width,height......
  • android 监听SDCard安装和卸载的代…
    //监听类privatefinalBroadcastReceiversdcardListener=newBroadcastReceiver(){@OverridepublicvoidonReceive(Contextcontext,Intentintent){Stringaction=intent.getAction();Log.d("TAG","sdcar......
  • android内存统计
    由于linux内核和nativeservice使用的内存在settings中统计不出来,因此对于分析内存相关问题时,使用procrank命令则能比较清晰的获取每个进程占用的内存资源$adbshellprocrankPIDVssRssPssUsscmdline15949668K39664K19857K17016Ksystem_server23629688K29676K1......
  • 关于android分辨率和使用iphone版…
    为了节省成本,开发app,一般情况下android和iphone用的是一套设计图。那适配怎么办?今天统计了下android的分辨率主要有:三星i9300 galaxys3 1280x720像素三星galaxys4  1920x1080像素还有经典的分辨率:854x480 还有部分960x540的。他们有个共同的特点,就是高宽比都是 1.......
  • Android中在控件上显示倒计时
    Android中在控件上显示倒计时Android中在控件上显示倒计时publicclassCountdownTimerActivityextendsActivity{privateTimeCounttime;privateButtonchecking;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TODOAuto-generatedmethodst......
  • android 检测应用异常 U…
    继承接口UncaughtExceptionHandler,并重写里面的uncaughtException(Threadthread,Throwableex)方法,这样就可以监测应用程序的异常情况,做相应的处理:publicclassmyCustomExceptionHandlerimplementsUncaughtExceptionHandlerprivateUncaughtExceptionHandlerpublicm......