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

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

Activity

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

<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!

<?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子类的集合,其中提供了一些常见的输入控件(如按钮和文本字段)和各种布局模式(如线性或相对布局)

<?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上绘制区域的输入控件或小部件。使用分层树,可以根据自己的需要设计简单或复杂的布局(布局越简单,性能越好)

@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直接编写布局,更经常使用它们的子类控件或容器来构建布局!

   public static AppManager getAppManager(){
        if(instance==null){
            instance=new AppManager();
        }
        return instance;
    }
相关文章
|
4天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
13天前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
42 6
|
24天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
70 6
|
23天前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
41 2
|
26天前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
25 3
|
26天前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
18 3
|
21天前
|
搜索推荐 Android开发 UED
安卓开发中的自定义视图:打造个性化用户界面
【10月更文挑战第22天】在安卓应用的海洋中,如何让你的应用脱颖而出?一个独特且直观的用户界面(UI)至关重要。本文将引导你通过自定义视图来打造个性化的用户体验,从基础的视图绘制到触摸事件的处理,我们将一步步深入探讨。准备好了吗?让我们开始吧!
|
26天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
17 0
|
缓存 安全 开发工具
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
898 0
|
Android开发
Android Studio在android Emulator中运行的项目黑屏
Android Studio在android Emulator中运行的项目黑屏
750 0
Android Studio在android Emulator中运行的项目黑屏