展会信息港展会大全

Android-自定义PopupWindow
来源:互联网   发布日期:2015-10-03 11:40:02   浏览:2644次  

导读:Android-自定义PopupWindow2014年5月12日PopupWindow在应用中应该是随处可见的,很常用到,比如在旧版本的微信当中就用到下拉的PopupWindow,那是自定...

Android-自定义PopupWindow2014年5月12日PopupWindow在应用中应该是随处可见的,很常用到,比如在旧版本的微信当中就用到下拉的PopupWindow,那是自定义的。新版微信5.2的ActionBar,有人已经模仿了它,但微信具体是使用了ActionBar还是其他的笔者倒是不太清楚,本篇博客主要介绍如何自定义一个PopupWindow来供自己在开发应用时使用。因为笔者最近在开发一款应用时用到这个知识点,所以自己实现了类似新版微信的效果。源码下载:http://download.csdn.net/detail/wwj_748/7337175 效果图如下: 首先从布局开始/14_CustomPopupWindow/res/layout/activity_swipe.xml

/14_CustomPopupWindow/res/layout/add_popup_dialog.xml

/14_CustomPopupWindow/res/layout/more_popup_dialog.xml

以上分别是主页面和两个popupWindow布局下面自定义两个PopupWindow,自己封装自己想要的PopuoWindow,这里只是给出示例/14_CustomPopupWindow/src/com/wwj/popupwindow/AddPopWindow.javapackage com.wwj.popupwindow;

import android.app.Activity;

import android.content.Context;

import android.graphics.drawable.ColorDrawable;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup.LayoutParams;

import android.widget.LinearLayout;

import android.widget.PopupWindow;

/**

* 自定义popupWindow

*

* @author wwj

*

*

*/

public class AddPopWindow extends PopupWindow {

private View conentView;

public AddPopWindow(final Activity context) {

LayoutInflater inflater = (LayoutInflater) context

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

conentView = inflater.inflate(R.layout.add_popup_dialog, null);

int h = context.getWindowManager().getDefaultDisplay().getHeight();

int w = context.getWindowManager().getDefaultDisplay().getWidth();

// 设置SelectPicPopupWindow的View

this.setContentView(conentView);

// 设置SelectPicPopupWindow弹出窗体的宽

this.setWidth(w / 2 + 50);

// 设置SelectPicPopupWindow弹出窗体的高

this.setHeight(LayoutParams.WRAP_CONTENT);

// 设置SelectPicPopupWindow弹出窗体可点击

this.setFocusable(true);

this.setOutsideTouchable(true);

// 刷新状态

this.update();

// 实例化一个ColorDrawable颜色为半透明

ColorDrawable dw = new ColorDrawable(0000000000);

// 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作

this.setBackgroundDrawable(dw);

// mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);

// 设置SelectPicPopupWindow弹出窗体动画效果

this.setAnimationStyle(R.style.AnimationPreview);

LinearLayout addTaskLayout = (LinearLayout) conentView

.findViewById(R.id.add_task_layout);

LinearLayout teamMemberLayout = (LinearLayout) conentView

.findViewById(R.id.team_member_layout);

addTaskLayout.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

AddPopWindow.this.dismiss();

}

});

teamMemberLayout.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

AddPopWindow.this.dismiss();

}

});

}

/**

* 显示popupWindow

*

* @param parent

*/

public void showPopupWindow(View parent) {

if (!this.isShowing()) {

// 以下拉方式显示popupwindow

this.showAsDropDown(parent, parent.getLayoutParams().width / 2, 18);

} else {

this.dismiss();

}

}

}

/14_CustomPopupWindow/src/com/wwj/popupwindow/MorePopWindow.javapackage com.wwj.popupwindow;

import android.app.Activity;

import android.content.Context;

import android.graphics.drawable.ColorDrawable;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup.LayoutParams;

import android.widget.PopupWindow;

public class MorePopWindow extends PopupWindow {

private View conentView;

public MorePopWindow(final Activity context) {

LayoutInflater inflater = (LayoutInflater) context

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

conentView = inflater.inflate(R.layout.more_popup_dialog, null);

int h = context.getWindowManager().getDefaultDisplay().getHeight();

int w = context.getWindowManager().getDefaultDisplay().getWidth();

// 设置SelectPicPopupWindow的View

this.setContentView(conentView);

// 设置SelectPicPopupWindow弹出窗体的宽

this.setWidth(w / 2 + 50);

// 设置SelectPicPopupWindow弹出窗体的高

this.setHeight(LayoutParams.WRAP_CONTENT);

// 设置SelectPicPopupWindow弹出窗体可点击

this.setFocusable(true);

this.setOutsideTouchable(true);

// 刷新状态

this.update();

// 实例化一个ColorDrawable颜色为半透明

ColorDrawable dw = new ColorDrawable(0000000000);

// 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作

this.setBackgroundDrawable(dw);

// mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);

// 设置SelectPicPopupWindow弹出窗体动画效果

this.setAnimationStyle(R.style.AnimationPreview);

}

public void showPopupWindow(View parent) {

if (!this.isShowing()) {

this.showAsDropDown(parent, parent.getLayoutParams().width / 2, 18);

} else {

this.dismiss();

}

}

}

上面用到一个动画样式效果:/14_CustomPopupWindow/res/values/styles.xml

用到两个动画资源/14_CustomPopupWindow/res/anim/fade_in.xml

/14_CustomPopupWindow/res/anim/fade_out.xml

/14_CustomPopupWindow/src/com/wwj/popupwindow/MainActivity.javapackage com.wwj.popupwindow;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener{

private Button setButton;

private Button addButton;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_swipe);

setButton = (Button) findViewById(R.id.btnSet);

addButton = (Button) findViewById(R.id.btnAdd);

setButton.setOnClickListener(this);

addButton.setOnClickListener(this);;

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btnSet:

MorePopWindow morePopWindow = new MorePopWindow(MainActivity.this);

morePopWindow.showPopupWindow(setButton);

break;

case R.id.btnSearch:

break;

case R.id.btnAdd:

AddPopWindow addPopWindow = new AddPopWindow(MainActivity.this);

addPopWindow.showPopupWindow(addButton);

break;

default:

break;

}

}

}

以上是代码实现,具体可以下载源码参考。

赞助本站

人工智能实验室

相关热词: android开发

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港