文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android如何使用DecorView实现对话框功能

2023-05-31 07:23

关注

这篇文章主要讲解了Android如何使用DecorView实现对话框功能,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

如果还不知道DecorView,那也没有什么关系 ^_^

先来看看实现的效果

Android如何使用DecorView实现对话框功能

Android如何使用DecorView实现对话框功能

实现的大致思路

  1. 首先需要明白什么是DecorView,他是android中界面的根布局。其实android的activity界面整个就是一个控件树,DecorView是根节点,DecorView的孩子节点就是一个LinearLayout,这个LinearLayout的孩子系节点就包括状态栏 + 和我们自己写的布局
  2. DecorView是FramLayout的子类(可以从源码中看到)
  3. 既然DecorView是根节点,而且还是FrameLayout,所以我们可以把我们自己的布局 添加到DecorView 或者 从DecorView移除,这样就模拟出了一个Dialog的效果~~ ,当然这个Dialog的样式,动画就可以自己想怎么写就怎么写了撒
  4. 通过activity.getWindow().getDecorView()可以获得DecorView

[下面大量 代码 ]

第一个对话框的实现

public class TipsDialog {  private Activity activity;  private View rootView;  private TextView confirmTextView;  private TextView cancelTextView;  private TextView contentTextView;  private boolean isShowing;  public TipsDialog(Activity activity) {    this.activity = activity;    isShowing = false;    rootView = LayoutInflater.from(activity).inflate(R.layout.view_tips_dialog,null);    confirmTextView = (TextView) rootView.findViewById(R.id.view_tips_dialog_tv_confirm);    cancelTextView = (TextView) rootView.findViewById(R.id.view_tips_dialog_tv_cancel);    contentTextView = (TextView) rootView.findViewById(R.id.view_tips_dialog_tv_content);  }  public void show(){    if(activity == null){      return;    }    if(isShowing){      return;    }    ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);    params.gravity = Gravity.CENTER;    rootView.setLayoutParams(params);    decorView.addView(rootView);    rootView.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        dismiss();      }    });    RotateAnimation rotateAnimation = new RotateAnimation(0,720f,RotateAnimation.RELATIVE_TO_SELF,0.5f,RotateAnimation.RELATIVE_TO_SELF,0.5f);    rotateAnimation.setDuration(2000);    contentTextView.startAnimation(rotateAnimation);    isShowing = true;  }  public void dismiss(){    if(!isShowing){      return;    }    isShowing = false;    if(rootView.getParent() == null){      return;    }    ViewGroup parent = (ViewGroup) rootView.getParent();    parent.removeView(rootView);  }  public int getRandomColor(){    Random random = new Random();    return Color.argb(random.nextInt(200),random.nextInt(240),random.nextInt(240),random.nextInt(240));  }  public boolean isShowing() {    return isShowing;  }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯