文档章节

PopupWindow(一)

yolinfeng
 yolinfeng
发布于 2015/06/27 16:20
字数 971
阅读 30
收藏 0
点赞 0
评论 0

 理论部分

一、PopupWindow和AlertDialog都是Android对话框的内容

二、两者的区别和联系

       本质区别为:AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。这两种区别的表现是:AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。

实践部分

一、创建PopupWindow的核心代码:

       PopupWindow pw = new PopupWindow(view,width,height);

       pw.setContentView(popupconten);//重新设置PopupWindow的内容

       pw.setFocusable(true);//默认是false,为false时,PopupWindow没有获得焦点能力,如果这是PopupWindow的内容中有EidtText,需要输入,这是是无法输入的;只有为true的时候,PopupWindow才具有获得焦点能力,EditText才是真正的EditText。

      pw.setAsDropDown(View view);//设置PopupWindow弹出的位置。

二、实例

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:id="@+id/mainlayout" >
    <TextView android:layout_width="fill_parent"
        android:id="@+id/textview1"
        android:layout_height="wrap_content"
        android:text="欢迎信息"/>
    <Button android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击弹出对话框"/>
</LinearLayout>

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="EditText" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button1_sure"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="确定"/>

        <Button android:id="@+id/button2_cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="取消"
            />
    </LinearLayout>

</LinearLayout>

 

 

package com.jiankeyan;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.InputType;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.PopupWindow;
import android.widget.TextView;

/**
 * 新建一个popupWindow弹出框 popupWindow是一个阻塞式的弹出框,这就意味着在我们退出这个弹出框之前,程序会一直等待,
 *
 * 这和AlertDialog不同哦,AlertDialog是非阻塞式弹出框,AlertDialog弹出的时候,后台可是还可以做其他事情的哦。
 *
 *
 */

public class PopupWindowActivity extends Activity {
 Button button;
 TextView textView;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  button = (Button) findViewById(R.id.button1);
  textView = (TextView) findViewById(R.id.textview1);
  button.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    initPopWindow();
   }

  });
 }

 private void initPopWindow() {
  // 加载PopupWindow的布局文件
  View contentView = LayoutInflater.from(getApplicationContext())
    .inflate(R.layout.popup, null);
  // 设置PopupWindow的背景颜色
  contentView.setBackgroundColor(Color.RED);
  // 声明一个对话框
  final PopupWindow popupWindow = new PopupWindow(null, 200, 300);
  // 为自定义的对话框设置自定义布局
  popupWindow.setContentView(contentView);

  // 这个popupWindow.setFocusable(true);非常重要,如果不在弹出之前加上这条语句,你会很悲剧的发现,你是无法在
  //
  // editText中输入任何东西的。该方法可以设定popupWindow获取焦点的能力。当设置为true时,系统会捕获到焦点给popupWindow
  //
  // 上的组件。默认为false哦.该方法一定要在弹出对话框之前进行调用。
  popupWindow.setFocusable(false);

  // popupWindow.showAsDropDown(View view)弹出对话框,位置在紧挨着view组件
  //
  // showAsDropDown(View anchor, int xoff, int yoff)弹出对话框,位置在紧挨着view组件,x y
  // 代表着偏移量
  //
  // showAtLocation(View parent, int gravity, int x, int y)弹出对话框
  //
  // parent 父布局 gravity 依靠父布局的位置如Gravity.CENTER x y 坐标值

  popupWindow.showAsDropDown(button);

  final EditText editText = (EditText) contentView
    .findViewById(R.id.editText1);
  // 设定当你点击EditText时,弹出的输入框是啥样子的。这里设置默认数字是输入,非数字不能输入
  editText.setInputType(InputType.TYPE_CLASS_NUMBER);

  Button button_sure = (Button) contentView
    .findViewById(R.id.button1_sure);
  button_sure.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    popupWindow.dismiss();
    textView.setText("展示信息:" + editText.getText());
   }
  });
  Button button_cancel = (Button) contentView
    .findViewById(R.id.button2_cancel);
  button_cancel.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    popupWindow.dismiss();
   }
  });
 }
}

 

 

 

© 著作权归作者所有

共有 人打赏支持
yolinfeng
粉丝 12
博文 196
码字总数 11946
作品 0
珠海
架构师
Android 中 PopupWindow 在7.0后适配

这里主要记录一次踩坑的经历。 需求:如上图左侧效果,想在按钮的下方弹一个PopupWindow。嗯,很简单一个效果,然当适配7.0后发现这个PopupWindow显示异常,然后网上找到了下面这种方案。 7....

smart_dev ⋅ 05/17 ⋅ 0

GridView+PopupWindow自定义数字键盘

public class SimpleGridViewTest extends Activity { EditText editText; private PopupWindow popupWindow; private GridView mGridView; private View contentview; private List datas =......

wx5a18b5d1780d3 ⋅ 04/19 ⋅ 0

android 对绘制的文本添加动画

场景: 存在较多绘制内容的区域需要某些动画效果, 需要尽量少修改视图的绘制方法,做到动画与绘制分离。 看个简单例子: 我在一个视图上绘制了一行文字,先看一下绘制部分的代码: 现在需要...

飛飛萨 ⋅ 05/28 ⋅ 0

android Dialog和Popupwindow,不显示

测试的是华为荣耀平板,在BaseActivity中有个方法,在里面构造dialog或popupwindow,在子类activity中手动点击按钮调用该方法,每次都正常显示弹窗,但是在回调接口中调用基本就不显示,偶尔...

Gowcage ⋅ 06/11 ⋅ 0

传说中的WindowManager

作者:不洗碗工作室 - catango 版权归作者所有,转载请注明出处 通常情况下,我们使用的Dialog,Activity等需要显示到屏幕上面的内容都需要WindowManager来操作的,WindowManager是一个非常重要...

不洗碗工作室 ⋅ 06/03 ⋅ 0

Android:PopupWindow

一、概述 1、构造方法 部分常用: PopupWindow(View contentView, int width, int height)Create a new non focusable popup window which can display the contentView.PopupWindow(View c......

Xushao ⋅ 2013/12/16 ⋅ 2

PopupWindow的使用简介

一、简介 PopupWindow一般用于View控件周边的弹出窗口。 public PopupWindow (View contentView, int width, int height, boolean focusable) 创建一个新的弹出窗口可以显示contentView。窗户...

_shieh ⋅ 2015/10/07 ⋅ 0

Android之自定义AlertDialog和PopupWindow实现(仿微信Dialog)

我们知道,在很多时候,我们都不用Android内置的一些控件,而是自己自定义一些自己想要的控件,这样显得界面更美观。 今天主要是讲自定义AlertDialog和popupWindow的使用,在很多需求中,我们...

executor ⋅ 2015/08/26 ⋅ 1

Android第四十四天

一、菜单 (1)选择菜单(OptionsMenu) 第一种方法: 1、在res目录下建立一个名称是menu的文件夹; 2、在menu下面建立一个XML文件(默认就是menu的类型) 3、在建立的XML文件中添加菜单的选...

黄晓磊 ⋅ 2016/08/30 ⋅ 0

Android 用自定义PopupWindow实现自定义Toast

标题有点拗口,其实是可以分别写成两篇博文的。也就是说看完这篇能了解两个方面: 自定义布局样式的Toast 自定义PopupWindow实现多功能Toast 先感性认识: 触发事件来自于MenuItem的onClick...

chainli ⋅ 2013/06/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)

之前没接触过证书加密的话,对证书相关的这些概念真是感觉挺棘手的,因为一下子来了一大堆新名词,看起来像是另一个领域的东西,而不是我们所熟悉的编程领域的那些东西,起码我个人感觉如此,且很长...

颖辉小居 ⋅ 17分钟前 ⋅ 0

利用有限制通配符提升API灵活性(28)

1、参数化类型是不可变的 List<String> 不是List<Object>的子类,但是二者是有联系的 利用有限制的通配符类型处理类似情况 List<? extends Object>(生产者) Collection<? super E>(消费者......

职业搬砖20年 ⋅ 23分钟前 ⋅ 0

ssm框架 +bootstrap分页

这里有两种方式 方式一:自己写分页 方式二:使用插件PageHelper 1.自己写分页 1.1 效果 1.2 实现过程 1.2.1 创建分页公共类 //---------------------------1.属性-------------------------...

Lucky_Me ⋅ 30分钟前 ⋅ 0

Istio

helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml after $ kubectl create namespace istio-system$ kubectl create -f $HOME/ist......

openthings ⋅ 31分钟前 ⋅ 0

内核线程、轻量级进程、用户线程

线程与进程概念 在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; 线程是程序执行的最小单元。 即线程作为调度和分配的基本单位,进程作为资源分配的基本单位 一个进程的组成...

117 ⋅ 36分钟前 ⋅ 0

elasticsearch2.4.6升级为elasticsearch-5.5.0的经历

将elasticsearch-5.5.0 中的配置 path.data 指向原来的数据路径 即 path.data: /usr/local/src/elasticsearch-2.4.6/data 注意: elasticsearch-5.5.0 需要将jdk版本升级到1.8...

晨猫 ⋅ 36分钟前 ⋅ 1

lvm讲解 磁盘故障小案例

1

oschina130111 ⋅ 41分钟前 ⋅ 0

那些提升开发人员工作效率的在线工具

本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中要经常使用到的。 Hollis偏爱使用...

时刻在奔跑 ⋅ 53分钟前 ⋅ 0

restful风格 实现DELETE PUT请求 的web.xml的配置

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframe......

泉天下 ⋅ 58分钟前 ⋅ 0

Shell数组

Shell数组 Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数...

蜗牛奔跑 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部