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

Android 中Popwindow弹出菜单的两种方法实例

程序员文章站 2023-12-02 13:33:34
android 中popwindow弹出菜单的两种方法实例 1.popwindow就是对话框的一种方式! 此文讲解的android中对话框的一种使用方式,它叫popwi...

android 中popwindow弹出菜单的两种方法实例

1.popwindow就是对话框的一种方式!

此文讲解的android中对话框的一种使用方式,它叫popwindow。

2、popwindow的特性

android的对话框有两种:popupwindow和alertdialog。它们的不同点在于:

alertdialog的位置固定,而popupwindow的位置可以随意。

alertdialog是非阻塞线程的,而popupwindow是阻塞线程的。

popupwindow的位置按照有无偏移分,可以分为偏移和无偏移两种;按照参照物的不同,可以分为相对于某个控件(anchor锚)和相对于父控件。

实例代码:

方法一的activity

package com.app.test02; 
 
import android.app.activity; 
import android.os.bundle; 
import android.view.gravity; 
import android.view.motionevent; 
import android.view.view; 
import android.view.view.onclicklistener; 
import android.view.view.ontouchlistener; 
import android.view.viewgroup.layoutparams; 
import android.widget.button; 
import android.widget.popupwindow; 
import android.widget.toast; 
 
public class popwindowleft extends activity { 
  // 声明popupwindow对象的引用 
  private popupwindow popupwindow; 
 
  /** called when the activity is first created. */ 
  @override 
  public void oncreate(bundle savedinstancestate) { 
    super.oncreate(savedinstancestate); 
    setcontentview(r.layout.activity_popupwindow_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.showatlocation(v, gravity.left, 0, 0); 
    } 
  }; 
 
  /** 
   * 创建popupwindow 
   */ 
  protected void initpopuptwindow() { 
    // todo auto-generated method stub 
    // 获取自定义布局文件activity_popupwindow_left.xml的视图 
    view popupwindow_view = getlayoutinflater().inflate(r.layout.activity_popupwindow_left, null, 
        false); 
    // 创建popupwindow实例,200,layoutparams.match_parent分别是宽度和高度 
    popupwindow = new popupwindow(popupwindow_view, 200, layoutparams.match_parent, 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 && popupwindow.isshowing()) { 
          popupwindow.dismiss(); 
          popupwindow = null; 
        } 
        return false; 
      } 
    }); 
  } 
  /*** 
   * 获取popupwindow实例 
   */ 
  private void getpopupwindow() { 
    if (null != popupwindow) { 
      popupwindow.dismiss(); 
      return; 
    } else { 
      initpopuptwindow(); 
    } 
  } 
} 

方法二的activity

package com.app.test02; 
 
import android.app.activity; 
import android.os.bundle; 
import android.view.gravity; 
import android.view.motionevent; 
import android.view.view; 
import android.view.view.onclicklistener; 
import android.view.view.ontouchlistener; 
import android.view.viewgroup.layoutparams; 
import android.widget.popupwindow; 
 
public class popwindowleftnew extends activity{ 
  private popupwindow popupwindow; 
  @override 
  protected void oncreate(bundle savedinstancestate) { 
    // todo auto-generated method stub 
    super.oncreate(savedinstancestate); 
    setcontentview(r.layout.activity_popupwindow_main); 
     
    findviewbyid(r.id.popbtn).setonclicklistener(new onclicklistener() { 
      @override 
      public void onclick(view v) { 
        // todo auto-generated method stub 
        // 获取自定义布局文件activity_popupwindow_left.xml的视图 
        view popupwindow_view = getlayoutinflater().inflate(r.layout.activity_popupwindow_left, null,false); 
        // 创建popupwindow实例,200,layoutparams.match_parent分别是宽度和高度 
        popupwindow = new popupwindow(popupwindow_view, 200, layoutparams.match_parent, true); 
        // 设置动画效果 
        popupwindow.setanimationstyle(r.style.animationfade); 
        // 这里是位置显示方式,在屏幕的左侧 
        popupwindow.showatlocation(v, gravity.left, 0, 0); 
        // 点击其他地方消失 
        popupwindow_view.setontouchlistener(new ontouchlistener() { 
          @override 
          public boolean ontouch(view v, motionevent event) { 
            // todo auto-generated method stub 
            if (popupwindow != null && popupwindow.isshowing()) { 
              popupwindow.dismiss(); 
              popupwindow = null; 
            } 
            return false; 
          } 
        }); 
      } 
    }); 
     
  } 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!