Android之PopupWindow弹出对话框
发布日期:2021-09-27 14:12:38 浏览次数:6 分类:技术文章

本文共 6644 字,大约阅读时间需要 22 分钟。

Android的对话框常用的有两种:PopupWindow和AlertDialog。PopupWindow顾名思义为弹出菜单,不同于AlertDialog对话框,PopupWindow弹出的位置可以很多变化,按照有无偏移分,可以分为无偏移和偏移两种;按照参照类型不同又可以分为两种:相对某个控件(Anchor锚)的位置和父容器内部的相对位置。具体如下:函数 简介 showAsDropDown(View anchor) 相对某个控件的位置(正左下方),无偏移 showAsDropDown(View anchor, int xoff, int yoff) 相对某个控件的位置,有偏移(正数表示下方右边,负数表示(上方左边)) showAtLocation(View parent, int gravity, int x, int y) 父容器容器相对位置,例如正中央Gravity.CENTER,下方Gravity.BOTTOM等下面是运行程序截图: 下面是运行程序截图:                     程序代码:布局:main.xml
代码: package com.myAndroid.test; import Android.app.Activity; import Android.content.Context; import Android.content.SharedPreferences.Editor; import Android.os.Bundle; import Android.util.Log; import Android.view.Gravity; import Android.view.LayoutInflater; 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.Gallery; import Android.widget.PopupWindow; import Android.widget.TextView; public class PopupWindowTest extends Activity {
//PopupWindow属于不阻塞的对话框,AlertDialog则是阻塞的。 private Button bt_popupWindow1; private Button bt_popupWindow2; private Button bt_popupWindow3; private Button bt_popupWindow4; private TextView tv_showText; private PopupWindow popupWindow; private int screenWidth; private int screenHeight; private int dialgoWidth; private int dialgoheight; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); } /** * 初始化控件和响应事件 */ private void initView() { bt_popupWindow1 = (Button)findViewById(R.id.bt_PopupWindow1); bt_popupWindow2 = (Button)findViewById(R.id.bt_PopupWindow2); bt_popupWindow3 = (Button)findViewById(R.id.bt_PopupWindow3); bt_popupWindow4 = (Button)findViewById(R.id.bt_PopupWindow4); tv_showText = (TextView)findViewById(R.id.tv_showText); bt_popupWindow1.setOnClickListener(new ClickEvent()); bt_popupWindow2.setOnClickListener(new ClickEvent()); bt_popupWindow3.setOnClickListener(new ClickEvent()); bt_popupWindow4.setOnClickListener(new ClickEvent()); } /** * 按钮点击事件处理 * @author Kobi * */ private class ClickEvent implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()) { case R.id.bt_PopupWindow1: //以自己为Anchor,不偏移 getPopupWindow(); popupWindow.showAsDropDown(v); break; case R.id.bt_PopupWindow2: //以自己为Anchor,偏移(screenWidth-dialgoWidth)/2, 0)--按钮正下方 getPopupWindow(); popupWindow.showAsDropDown(v, (screenWidth-dialgoWidth)/2, 0); break; case R.id.bt_PopupWindow3: //以屏幕中心为参照,不偏移 getPopupWindow(); popupWindow.showAtLocation(findViewById(R.id.layout), Gravity.CENTER, 0, 0); break; case R.id.bt_PopupWindow4: //以屏幕左下角为参照,偏移(screenWidth-dialgoWidth)/2, 0) --屏幕下方中央 getPopupWindow(); popupWindow.showAtLocation(findViewById(R.id.layout), Gravity.BOTTOM, 0, 0); break; default: break; } } } /** * 创建PopupWindow */ protected void initPopuptWindow() { // TODO Auto-generated method stub View popupWindow_view = getLayoutInflater().inflate( //获取自定义布局文件dialog.xml的视图 R.layout.dialog, null,false); popupWindow = new PopupWindow(popupWindow_view, 200, 150, true);//创建PopupWindow实例 Button bt_ok = (Button)popupWindow_view.findViewById(R.id.bt_ok); //dialog.xml视图里面的控件 Button bt_cancle = (Button)popupWindow_view.findViewById(R.id.bt_cancle); final EditText et_text = (EditText)popupWindow_view.findViewById(R.id.et_text); bt_ok.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub tv_showText.setText(et_text.getText()); //在标签里显示内容 popupWindow.dismiss(); //对话框消失 } }); bt_cancle.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub popupWindow.dismiss(); } }); //获取屏幕和对话框各自高宽 screenWidth = PopupWindowTest.this.getWindowManager().getDefaultDisplay().getWidth(); screenHeight = PopupWindowTest.this.getWindowManager().getDefaultDisplay().getHeight(); dialgoWidth = popupWindow.getWidth(); dialgoheight = popupWindow.getHeight(); } /* * 获取PopupWindow实例 */ private void getPopupWindow() { if(null != popupWindow) { popupWindow.dismiss(); return; }else { initPopuptWindow(); } } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); Log.e("ActivityState", "onPause"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); Log.e("ActivityState", "onResume"); } }

 

转载于:https://www.cnblogs.com/MMLoveMeMM/articles/4093946.html

转载地址:https://blog.csdn.net/FLY_THINK2012/article/details/101840939 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Linux下的USB总线驱动(01)——USB理论
下一篇:Android模拟按键——源码环境下开发应用程序 ---编译jar(android可执行程序)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月05日 11时07分24秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章