Android 中 PopupWindow 的用法

package com.example.popupwindowndemo;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.PopupWindow;
import android.widget.Toast;

public class MainActivity extends Activity {

private Button loginButton;
private Button regist;
private PopupWindow popupWindow;
private View parent;
private EditText edit_user;
private EditText pwd;
private Button pop_log;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loginButton = (Button) findViewById(R.id.login);
regist = (Button) findViewById(R.id.regist);
/**弹窗的用法

* 一个用来展示视图的窗体,,展示在当前activity上面的容器(悬浮在activity上面)
* 构造方法:
* public PopupWindow(View contentView, int width, int height)
* View contentView, 要展现的布局
* int width, 弹出窗体的宽度
* int height 弹出窗体的高度
*
* PopupWindow本身默认是没有布局的 所以要设置布局视图来显示
*
* public PopupWindow(View contentView, int width, int height, boolean focusable)
* boolean focusable 弹出的窗体是否获取焦点
*
* button本身是可以获取焦点的 特殊的是editText 有时你需要给他焦点
*/
//把布局文件转换成视图
View contentView = View.inflate(MainActivity.this, R.layout.pop_layout, null);
parent = View.inflate(MainActivity.this, R.layout.activity_main, null);
popupWindow = new PopupWindow(contentView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
//设置窗体是否可以触摸 默认是true
popupWindow.setTouchable(true);
//设置popupWindown获取焦点 这样输入框才能获取到焦点 默认为false
popupWindow.setFocusable(true);
//设置窗体外面部分可以触摸 如果true 触摸外面的时候将会隐藏窗体
popupWindow.setOutsideTouchable(true);
//上面的方法要结合着 设置背景去用 new BitmapDrawable()意思是一个空的背景
/**
* 两个方法结合使用 可以使点击周围的时候 窗体消失 ;点击返回键的时候窗体消失 而不是直接作用在activity上
*/
popupWindow.setBackgroundDrawable(new BitmapDrawable());
/**
* popUpWindown里面控件的点击事件 使用contentView.findViewById()拿到的
*/
edit_user = (EditText) contentView.findViewById(R.id.edit_user);
pwd = (EditText) contentView.findViewById(R.id.pwd);
pop_log = (Button) contentView.findViewById(R.id.pop_log);
pop_log.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (! TextUtils.isEmpty(edit_user.getText().toString()) && ! TextUtils.isEmpty(pwd.getText().toString())) {
Toast.makeText(MainActivity.this, "登陆成功", 0).show();
//弹出窗体隐藏
popupWindow.dismiss();
}
}
});
contentView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
popupWindow.dismiss();
}
});
loginButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 弹出窗体 调用的是popupWindown显示的方法
//popupWindow.showAsDropDown(loginButton);//1.显示在传入控件的左下方 没有偏移量
//popupWindow.showAsDropDown(loginButton, 20, 20);//2.显示在传入控件的左下方 并且可以设置偏移量
popupWindow.showAtLocation(parent, Gravity.BOTTOM, 0, 0);

}
});
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值