前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android】Android对于Activity的运用以及ViewGroup和 用户界面组件在项目中的运用

【Android】Android对于Activity的运用以及ViewGroup和 用户界面组件在项目中的运用

作者头像
上进小菜猪
发布2022-12-27 17:03:00
6460
发布2022-12-27 17:03:00
举报

Activity

确保无论系统从哪个任务启动活动,都只会创建一个活动实例并将其添加到新任务堆栈的顶部,也就是说,该实例启动的其他活动将自动在另一个任务中运行。再次启动此活动的实例时,将重用现有任务和实例。将调用此实例的onNewIntent()方法,将Intent实例传递给此实例。与singleTask一样,系统中同时只有一个这样的活动实例。

代码语言:javascript
复制
<style name="roomRatingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:progressDrawable">@drawable/ratingbar_full</item>
        <item name="android:minHeight">24dip</item>
        <item name="android:maxHeight">24dip</item>
    </style>

按Home将上一个任务切换到后台 长按Home键显示最近执行的任务列表 单击启动器或主屏幕中的应用程序图标以打开新任务或将现有任务安排到前台 在单任务模式下启动活动时,系统将搜索是否已存在合适的任务。如果是,任务将被分派到前台以重用任务。如果任务中已存在要启动的活动的实例,请清除该实例上方的所有活动,并向用户显示该实例。如果现有任务中没有要启动的活动实例,请在任务顶部启动一个实例。如果任务不存在,将启动一个新任务,并在新任务中启动单一任务模式下的活动实例。 启动单个实例的活动时,它将在系统中搜索此活动的实例是否已存在。如果存在,它会将此实例的任务安排到前台,并重用此活动的实例(此任务中只有一个活动)。如果它不存在,它将打开一个新任务,并在此新任务中启动此singleInstance模式的活动实例。

在这里插入图片描述
在这里插入图片描述

进程解析:活动调用startActivity后,它最终调用attach方法,在PolicyManager中实现Ipolicy接口,然后实现Policy对象,然后调用makenewwindow(Context)方法,该方法返回PhoneWindow对象。PhoneWindow是Window的子类。在这个PhoneWindow中,有一个DecorView的内部类,它是所有应用程序窗口的根视图,直接控制是否显示活动(参考旧驱动程序的原始单词…)。好吧,其中有一个LinearLayout和两个FrameLayout。它们分别用于安装ActionBar和CustomView,并将setContentView()加载的布局放入此CustomView!

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background"
        android:drawable="@mipmap/ic_rating_off1" />
    <item android:id="@android:id/secondaryProgress"
        android:drawable="@mipmap/ic_rating_off1" />
    <item android:id="@android:id/progress"
        android:drawable="@mipmap/ic_rating_on1" />
</layer-list>  

总结三者之间的关系:一个牵强的比喻:我们可以分别称这三类:画家、画布和用画笔画的东西;艺术家用画笔(LayoutInfector.infalte)绘制一个图案,然后在画布上绘制(addView)!最终显示(setContentView)

ViewGroup

当的应用程序加载上述布局资源时,Android会将布局中的每个节点实例化为对象。然后,可以为这些对象定义一些其他行为,查询对象的状态,或修改布局。有关创建UI布局的完整指南,请参阅XML布局

用户界面组件

不需要使用所有View和ViewGroup对象创建UI布局。Android为我们提供了一些应用程序控件、标准UI布局,只需定义内容即可。这些UI组件具有用于其属性的API文档,例如操作栏、对话框和状态通知栏。

在Android APP中,所有用户界面元素都由View和ViewGroup对象组成。视图是用户在屏幕上绘制时可以与之交互的对象。ViewGroup是用于存储其他View(和ViewGroup)对象的布局容器!Android为我们提供了View和ViewGroup子类的集合,其中提供了一些常见的输入控件(如按钮和文本字段)和各种布局模式(如线性或相对布局)

代码语言:javascript
复制
<?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" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="I am a Button" />
</LinearLayout>
在这里插入图片描述
在这里插入图片描述

APP用户界面上的每个组件都由View和ViewGroup对象的层次结构组成,如图1所示。每个ViewGroup都是用于组织子视图的不可见容器。其子视图可以是在UI上绘制区域的输入控件或小部件。使用分层树,可以根据自己的需要设计简单或复杂的布局(布局越简单,性能越好)

代码语言:javascript
复制
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false);
    ImageView img_icon = (ImageView) convertView.findViewById(R.id.img_icon);
    TextView txt_aName = (TextView) convertView.findViewById(R.id.txt_aName);
    TextView txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak);

    img_icon.setBackgroundResource(mData.get(position).getaIcon());
    txt_aName.setText(mData.get(position).getaName());
    txt_aSpeak.setText(mData.get(position).getaSpeak());
    return convertView;
}

Android中的图形界面由View、ViewGroup及其子类组成:View:所有视觉控件的父类,提供组件描述和时间处理方法。ViewGroup:View类的子类,可以有子控件,可以视为容器。Android UI中的控件按照这种分层树结构堆叠。有两种方法可以创建UI布局。可以用Java编写代码或通过XML定义布局,后者更方便、更易于理解!这也是我们最常用的方法!此外,我们很少使用View和ViewGroup直接编写布局,更经常使用它们的子类控件或容器来构建布局!

代码语言:javascript
复制
   public static AppManager getAppManager(){
        if(instance==null){
            instance=new AppManager();
        }
        return instance;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Activity
  • ViewGroup
    • 用户界面组件
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档