当前位置:   article > 正文

Android studio 之 弹窗PopupWindow_android studio 弹窗样式

android studio 弹窗样式

1.准备弹窗视图 popuop_layout.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="horizontal"
  4. android:background="#00ffff"
  5. android:padding="2dp"
  6. android:layout_width="wrap_content"
  7. android:layout_height="wrap_content">
  8. <TextView
  9. android:id="@+id/sele"
  10. android:layout_width="60dp"
  11. android:layout_height="30dp"
  12. android:background="#000000"
  13. android:textColor="#ffffff"
  14. android:gravity="center"
  15. android:text="选择" />
  16. <TextView
  17. android:id="@+id/all_sele"
  18. android:layout_width="60dp"
  19. android:layout_height="30dp"
  20. android:background="#000000"
  21. android:textColor="#ffffff"
  22. android:gravity="center"
  23. android:text="全选" />
  24. <TextView
  25. android:id="@+id/cope"
  26. android:layout_width="60dp"
  27. android:layout_height="30dp"
  28. android:background="#000000"
  29. android:textColor="#ffffff"
  30. android:gravity="center"
  31. android:text="复制" />
  32. </LinearLayout>

2.添加一个按钮

  1. <Button
  2. android:id="@+id/popw_btn"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:layout_marginTop="20dp"
  6. android:onClick="popAlert"
  7. android:text="PopupWindow 弹窗" />

3.在按钮的点击事件中设置弹窗

实例化 PopupWindow 对象

参数一 ,用在弹窗中的View(注意不是布局资源id,所以要根据布局资源id转换成view)

布局文件xml和视图之间的关系
  • 布局文件(.xml文件)定义了UI元素的结构和外观,而View对象则代表了布局中的一个具体的UI元素。 通过使用LayoutInflater类,我们可以将布局文件解析成一个View对象,然后将布局文件转换为实际可见的 UI 元素
  • 通过指定上下文(this)来获取当前上下文环境的LayoutInflater实例.
  • inflate(R.layout.popuop_layout, null)是LayoutInflater类的方法,它用于将布局文件R.layout.popuop_layout转换为一个View对象

参数二/三 长宽
参数四 是否获取焦点

  1. //设置PopupWindow
  2. public void showPopupWindow(View anchorView){
  3. // 1.实例化 PopupWindow 对象
  4. /* 参数一 用在弹窗中的View(注意不是布局资源id,所以要根据布局资源id转换成view)
  5. * 参数二/三 长宽
  6. * 参数四 是否获取焦点*/
  7. // 1.1 准备弹窗需要的视图
  8. /* 根据 id = R.layout.popuop_layout 布局文件创建一个视图View,在 环境上下文 中使用*/
  9. /* 布局文件xml和视图之间的关系
  10. * 布局文件(.xml文件)定义了UI元素的结构和外观,而View对象则代表了布局中的一个具体的UI元素。
  11. * 通过使用LayoutInflater类,我们可以将布局文件解析成一个View对象,然后将布局文件转换为实际可见的 UI 元素
  12. * 通过指定上下文(this)来获取当前上下文环境的LayoutInflater实例
  13. * nflate(R.layout.popuop_layout, null)是LayoutInflater类的方法,它用于将布局文件R.layout.popuop_layout转换为一个View对象。*/
  14. View v = LayoutInflater.from(this).inflate(R.layout.popuop_layout,null);
  15. PopupWindow popupWindow = new PopupWindow(v,400,70,false);
  16. // 2.设置
  17. // 2.1 设置背景
  18. popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// 透明色
  19. // 2.2 设置能响应外部的点击事件
  20. popupWindow.setOutsideTouchable(true);
  21. // 2.3 设置弹窗能响应点击事件
  22. popupWindow.setTouchable(true);
  23. // 2.4 为弹窗中的文本设计点击事件
  24. /* 一般设计点击事件需要用 findViewById() 去找到控件的id,从而找到控件,再为控件绑定点击事件
  25. * 但此时我们想要找的控件不在当前视图中,它在 R.layout.popuop_layout 布局中,所以我们要在由它创建的视图中找控件
  26. * 当前activity绑定的布局是 R.layout.activity_button */
  27. v.findViewById(R.id.sele).setOnClickListener(new View.OnClickListener() {
  28. @Override
  29. public void onClick(View v) {
  30. Toast.makeText(ButtonActivity.this,"点击了选择",Toast.LENGTH_SHORT).show();
  31. popupWindow.dismiss();
  32. }
  33. });
  34. v.findViewById(R.id.all_sele).setOnClickListener(new View.OnClickListener() {
  35. @Override
  36. public void onClick(View v) {
  37. Toast.makeText(ButtonActivity.this,"点击了全选",Toast.LENGTH_SHORT).show();
  38. popupWindow.dismiss();
  39. }
  40. });
  41. v.findViewById(R.id.cope).setOnClickListener(new View.OnClickListener() {
  42. @Override
  43. public void onClick(View v) {
  44. Toast.makeText(ButtonActivity.this,"点击了复制",Toast.LENGTH_SHORT).show();
  45. popupWindow.dismiss();
  46. }
  47. });
  48. // 3.显示
  49. /* View anchor, int xoff, int yoff
  50. * 参数一 在哪里显示
  51. * x偏移
  52. * y偏移*/
  53. popupWindow.showAsDropDown(anchorView);

设置弹窗动画

创建动画资源

在res目录下新建 anim文件,新建动画资源

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <!-- 设置动画资源,此时是移动动画 -->
  4. <translate
  5. android:fromXDelta="-10dp"
  6. android:toXDelta="0dp"
  7. android:fromYDelta="-10dp"
  8. android:toYDelta="0dp"/>
  9. </set>

创建风格,应用动画资源 - 打开values 下的 themesxml 文件,添加一下代码

  1. <!--2.在风格里应用动画 -->
  2. <!-- popupStyle 的风格
  3. android:windowExitAnimation 窗口进入动画
  4. -->
  5. <style name="popupStyle">
  6. <item name="android:windowExitAnimation"> @anim/popup</item>
  7. </style>

为弹窗设置风格

  1. // 设置弹窗动画
  2. /* 1.创建动画资源 -- 先创建文件夹 再创建资源文件
  3. * 2.创建风格,应用动画资源
  4. * 3.将当前弹窗的的动画风格设置为第2步的风格 */
  5. popupWindow.setAnimationStyle(R.style.popupStyle);
  1. //设置PopupWindow
  2. public void showPopupWindow(View anchorView){
  3. // 1.实例化 PopupWindow 对象
  4. /* 参数一 用在弹窗中的View(注意不是布局资源id,所以要根据布局资源id转换成view)
  5. * 参数二/三 长宽
  6. * 参数四 是否获取焦点*/
  7. // 1.1 准备弹窗需要的视图
  8. /* 根据 id = R.layout.popuop_layout 布局文件创建一个视图View,在 环境上下文 中使用*/
  9. /* 布局文件xml和视图之间的关系
  10. * 布局文件(.xml文件)定义了UI元素的结构和外观,而View对象则代表了布局中的一个具体的UI元素。
  11. * 通过使用LayoutInflater类,我们可以将布局文件解析成一个View对象,然后将布局文件转换为实际可见的 UI 元素
  12. * 通过指定上下文(this)来获取当前上下文环境的LayoutInflater实例
  13. * nflate(R.layout.popuop_layout, null)是LayoutInflater类的方法,它用于将布局文件R.layout.popuop_layout转换为一个View对象。*/
  14. View v = LayoutInflater.from(this).inflate(R.layout.popuop_layout,null);
  15. PopupWindow popupWindow = new PopupWindow(v,400,70,false);
  16. // 2.设置
  17. // 2.1 设置背景
  18. popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// 透明色
  19. // 2.2 设置能响应外部的点击事件
  20. popupWindow.setOutsideTouchable(true);
  21. // 2.3 设置弹窗能响应点击事件
  22. popupWindow.setTouchable(true);
  23. // 2.4 为弹窗中的文本设计点击事件
  24. /* 一般设计点击事件需要用 findViewById() 去找到控件的id,从而找到控件,再为控件绑定点击事件
  25. * 但此时我们想要找的控件不在当前视图中,它在 R.layout.popuop_layout 布局中,所以我们要在由它创建的视图中找控件
  26. * 当前activity绑定的布局是 R.layout.activity_button */
  27. v.findViewById(R.id.sele).setOnClickListener(new View.OnClickListener() {
  28. @Override
  29. public void onClick(View v) {
  30. Toast.makeText(ButtonActivity.this,"点击了选择",Toast.LENGTH_SHORT).show();
  31. popupWindow.dismiss();
  32. }
  33. });
  34. v.findViewById(R.id.all_sele).setOnClickListener(new View.OnClickListener() {
  35. @Override
  36. public void onClick(View v) {
  37. Toast.makeText(ButtonActivity.this,"点击了全选",Toast.LENGTH_SHORT).show();
  38. popupWindow.dismiss();
  39. }
  40. });
  41. v.findViewById(R.id.cope).setOnClickListener(new View.OnClickListener() {
  42. @Override
  43. public void onClick(View v) {
  44. Toast.makeText(ButtonActivity.this,"点击了复制",Toast.LENGTH_SHORT).show();
  45. popupWindow.dismiss();
  46. }
  47. });
  48. // 设置弹窗动画
  49. /* 1.创建动画资源 -- 先创建文件夹 再创建资源文件
  50. * 2.创建风格,应用动画资源
  51. * 3.将当前弹窗的的动画风格设置为第2步的风格 */
  52. popupWindow.setAnimationStyle(R.style.popupStyle);
  53. // 3.显示
  54. /* View anchor, int xoff, int yoff
  55. * 参数一 在哪里显示
  56. * x偏移
  57. * y偏移*/
  58. popupWindow.showAsDropDown(anchorView);
  59. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/267107
推荐阅读
相关标签
  

闽ICP备14008679号