赞
踩
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:background="#00ffff"
- android:padding="2dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
-
-
- <TextView
- android:id="@+id/sele"
- android:layout_width="60dp"
- android:layout_height="30dp"
- android:background="#000000"
- android:textColor="#ffffff"
- android:gravity="center"
- android:text="选择" />
-
- <TextView
- android:id="@+id/all_sele"
- android:layout_width="60dp"
- android:layout_height="30dp"
- android:background="#000000"
- android:textColor="#ffffff"
- android:gravity="center"
- android:text="全选" />
-
- <TextView
- android:id="@+id/cope"
- android:layout_width="60dp"
- android:layout_height="30dp"
- android:background="#000000"
- android:textColor="#ffffff"
- android:gravity="center"
- android:text="复制" />
- </LinearLayout>
- <Button
- android:id="@+id/popw_btn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="20dp"
- android:onClick="popAlert"
- android:text="PopupWindow 弹窗" />
参数一 ,用在弹窗中的View(注意不是布局资源id,所以要根据布局资源id转换成view)
布局文件xml和视图之间的关系
参数二/三 长宽
参数四 是否获取焦点
- //设置PopupWindow
- public void showPopupWindow(View anchorView){
-
- // 1.实例化 PopupWindow 对象
- /* 参数一 用在弹窗中的View(注意不是布局资源id,所以要根据布局资源id转换成view)
- * 参数二/三 长宽
- * 参数四 是否获取焦点*/
- // 1.1 准备弹窗需要的视图
- /* 根据 id = R.layout.popuop_layout 布局文件创建一个视图View,在 环境上下文 中使用*/
- /* 布局文件xml和视图之间的关系
- * 布局文件(.xml文件)定义了UI元素的结构和外观,而View对象则代表了布局中的一个具体的UI元素。
- * 通过使用LayoutInflater类,我们可以将布局文件解析成一个View对象,然后将布局文件转换为实际可见的 UI 元素
- * 通过指定上下文(this)来获取当前上下文环境的LayoutInflater实例
- * nflate(R.layout.popuop_layout, null)是LayoutInflater类的方法,它用于将布局文件R.layout.popuop_layout转换为一个View对象。*/
- View v = LayoutInflater.from(this).inflate(R.layout.popuop_layout,null);
- PopupWindow popupWindow = new PopupWindow(v,400,70,false);
-
- // 2.设置
- // 2.1 设置背景
- popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// 透明色
- // 2.2 设置能响应外部的点击事件
- popupWindow.setOutsideTouchable(true);
- // 2.3 设置弹窗能响应点击事件
- popupWindow.setTouchable(true);
- // 2.4 为弹窗中的文本设计点击事件
- /* 一般设计点击事件需要用 findViewById() 去找到控件的id,从而找到控件,再为控件绑定点击事件
- * 但此时我们想要找的控件不在当前视图中,它在 R.layout.popuop_layout 布局中,所以我们要在由它创建的视图中找控件
- * 当前activity绑定的布局是 R.layout.activity_button */
- v.findViewById(R.id.sele).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(ButtonActivity.this,"点击了选择",Toast.LENGTH_SHORT).show();
- popupWindow.dismiss();
- }
- });
-
- v.findViewById(R.id.all_sele).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(ButtonActivity.this,"点击了全选",Toast.LENGTH_SHORT).show();
- popupWindow.dismiss();
- }
- });
-
- v.findViewById(R.id.cope).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(ButtonActivity.this,"点击了复制",Toast.LENGTH_SHORT).show();
- popupWindow.dismiss();
- }
- });
-
- // 3.显示
- /* View anchor, int xoff, int yoff
- * 参数一 在哪里显示
- * x偏移
- * y偏移*/
- popupWindow.showAsDropDown(anchorView);
创建动画资源
在res目录下新建 anim文件,新建动画资源
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android">
-
- <!-- 设置动画资源,此时是移动动画 -->
- <translate
-
- android:fromXDelta="-10dp"
- android:toXDelta="0dp"
- android:fromYDelta="-10dp"
- android:toYDelta="0dp"/>
- </set>
创建风格,应用动画资源 - 打开values 下的 themesxml 文件,添加一下代码
- <!--2.在风格里应用动画 -->
- <!-- popupStyle 的风格
- android:windowExitAnimation 窗口进入动画
- -->
- <style name="popupStyle">
- <item name="android:windowExitAnimation"> @anim/popup</item>
- </style>
为弹窗设置风格
- // 设置弹窗动画
- /* 1.创建动画资源 -- 先创建文件夹 再创建资源文件
- * 2.创建风格,应用动画资源
- * 3.将当前弹窗的的动画风格设置为第2步的风格 */
- popupWindow.setAnimationStyle(R.style.popupStyle);
- //设置PopupWindow
- public void showPopupWindow(View anchorView){
-
- // 1.实例化 PopupWindow 对象
- /* 参数一 用在弹窗中的View(注意不是布局资源id,所以要根据布局资源id转换成view)
- * 参数二/三 长宽
- * 参数四 是否获取焦点*/
- // 1.1 准备弹窗需要的视图
- /* 根据 id = R.layout.popuop_layout 布局文件创建一个视图View,在 环境上下文 中使用*/
- /* 布局文件xml和视图之间的关系
- * 布局文件(.xml文件)定义了UI元素的结构和外观,而View对象则代表了布局中的一个具体的UI元素。
- * 通过使用LayoutInflater类,我们可以将布局文件解析成一个View对象,然后将布局文件转换为实际可见的 UI 元素
- * 通过指定上下文(this)来获取当前上下文环境的LayoutInflater实例
- * nflate(R.layout.popuop_layout, null)是LayoutInflater类的方法,它用于将布局文件R.layout.popuop_layout转换为一个View对象。*/
- View v = LayoutInflater.from(this).inflate(R.layout.popuop_layout,null);
- PopupWindow popupWindow = new PopupWindow(v,400,70,false);
-
- // 2.设置
- // 2.1 设置背景
- popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// 透明色
- // 2.2 设置能响应外部的点击事件
- popupWindow.setOutsideTouchable(true);
- // 2.3 设置弹窗能响应点击事件
- popupWindow.setTouchable(true);
- // 2.4 为弹窗中的文本设计点击事件
- /* 一般设计点击事件需要用 findViewById() 去找到控件的id,从而找到控件,再为控件绑定点击事件
- * 但此时我们想要找的控件不在当前视图中,它在 R.layout.popuop_layout 布局中,所以我们要在由它创建的视图中找控件
- * 当前activity绑定的布局是 R.layout.activity_button */
- v.findViewById(R.id.sele).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(ButtonActivity.this,"点击了选择",Toast.LENGTH_SHORT).show();
- popupWindow.dismiss();
- }
- });
-
- v.findViewById(R.id.all_sele).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(ButtonActivity.this,"点击了全选",Toast.LENGTH_SHORT).show();
- popupWindow.dismiss();
- }
- });
-
- v.findViewById(R.id.cope).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(ButtonActivity.this,"点击了复制",Toast.LENGTH_SHORT).show();
- popupWindow.dismiss();
- }
- });
-
- // 设置弹窗动画
- /* 1.创建动画资源 -- 先创建文件夹 再创建资源文件
- * 2.创建风格,应用动画资源
- * 3.将当前弹窗的的动画风格设置为第2步的风格 */
- popupWindow.setAnimationStyle(R.style.popupStyle);
-
-
- // 3.显示
- /* View anchor, int xoff, int yoff
- * 参数一 在哪里显示
- * x偏移
- * y偏移*/
- popupWindow.showAsDropDown(anchorView);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。