Android 中 PopupWindow 的用法

xiaoxiao2021-02-27  241

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); } }); } }
转载请注明原文地址: https://www.6miu.com/read-3307.html

最新回复(0)