首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

速读原著-Android应用开发入门教程(Android的屏幕元素体系)

第 8 章 视图组(ViewGroup)和布局(Layout)的使用 在 Android 中视图组是集合若干个控件在一起的元素,ViewGroup 有两种用法,一种是像普通的控件一样使用(如网页视图、旋转按钮...8.1 Android的屏幕元素体系 在屏幕中控件的组织上,可以将各个视图(控件)组成一个视图组(ViewGroup),视图组是一个包含了其他视图的视图。...Android GUI 程序的屏幕体系结构的组织遵循以下原则: 一个屏幕可以包含一个视图; 视图组本身也是一个视图; 视图组可以包含若干个视图。...在这里一个主要的限制是:在没有视图组的情况下,两个以上的视图(也包括视图组)是不能够并列的。 例如,在布局文件中,类似下面的写法是不可以的。 Android 中,有一些预置的 ViewGroup 可以直接像 View 一样使用(如 WebView),还有一些ViewGroup 本身没有功能,只是提供屏幕上的各种布局(如 AbsoluteLayout

47120

速读原著-Android应用开发入门教程(Android中控件的层次结构)

第 7 章 控件(Widget)的使用 在各个 GUI 系统中,控件一般都是占内容最多的部分,使用各种控件也是使用一个 GUI 系统的主要内容。...7.1 Android中控件的层次结构 android.view.View 类(视图类)呈现了最基本的 UI 构造块。一个视图占据屏幕上的一个方形区域,并且负责绘制和事件处理。...Android 中的控件常常在布局文件(Layout)中进行描述,在 Java 源代码中通过 findViewById()函数根据ID 获得每一个 View 的句柄,并且转换成实际的类型来使用。...在 Android 中各种 UI 类的名称也是它们在布局文件 XML 中使用的标签名称。...android.view.View 的一个重要的扩展者是 android.view.ViewGroup 类,这个类表示一个视图的集合,在这个视图的集合中可以包含众多的子视图android.view.ViewGroup

75030
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ListView优化和列表首尾使用

    在某些GUI工具包中,可以通过在程序代码中整体性地声明复合的View对象来避免这个问题。因为在访问这个组件时,无非就是调用getter方法或访问字段。...一个比较理想的方案就是,仍然使用XML布局,但是又可以缓存行中的关键子组件,也就是只需要查找一次即可,就意味着要使用持有者模式了。...接下来就通过一个示例来学习如何使用ListView列表头和列表尾。仍然在“自定义BaseAdapter”的基础上来完成。...首先设计一个ListView列表头布局list_headview_layout.xml,主要是一个搜索框,代码如下: xml version="1.0" encoding="utf-8"?...:hint="搜索" android:padding="10dp"/> 接着设计一个ListView列表尾布局list_footview_layout.xml

    1.5K80

    android布局文件详解

    ,你可以通过两种方式来声明你的布局. ①在xml文件中定义UI 元素:android提供了与View 类及其子类相关的简单易懂的标签。...此外通过布局文件的方式,你可以更加方便的想象你布局文件的结构,这样也方便了你来解决其中的问题,如果你坚持使用代码的方式来控制UI,请看View和ViewGroup的说明。...加载布局文件 当你完成了布局文件的声明之后,每一个xml布局文件都会被编译到一个View对象里面,你应该在你代码的onCreate方法中中来加载得到这个View对象。...ID 每一个View对象都有一个与之关联的int类型的id,作为区别其他对象的根据,当应用被编译完成的时候,id会作为一个int类型的数值,但是在xml布局文件中它是android:id的值,作为一个字符串类型存在...声明id属性的语法如下 android:id="@+id/my_button" @符号表示xml应该将这个id字符串后面的作为一个id来解析,+ 号表示这是一个新定义的资源,应该被创建并且添加我们项目的

    1.5K10

    Android开发之项目经验分享

    在Android开发中,除了基本的理论知识,还需要将所学知识运用到真实的项目中,在项目中锻炼自己的分析问题、解决问题的能力,本文将总结一下本人项目中遇到的一些问题,总结成章,与大家共勉~~~ 1、如何拉伸一个图片为一条线...项目需求:需要在布局中设置一条分割线,该分割线需要自定义,美工也给了一张图片,那么如何实现?...@drawable/bg" android:tileMode="repeat" /> 然后在布局的xml文件中可以这样引用: xml文件中,在自定义主题里加入一个item: android="http://schemas.android.com/apk...无效的问题 问题描述:调用notifyDataSetChanged 界面并没有刷新 一般情况下,适配器的对应的list数据源如果发生了改变,调用该方法能达到刷新列表的效果,但是有时候发现 当list

    69750

    android自定义控件一站式入门

    attribute表示可以在布局xml文件中定义View时使用的xml元素名称,例如layput_width,padding这样的。...Android提供了统一的通过xml为创建的控件对象提供初始值的方式: 为控件定义xml中使用的attribute。 在布局文件中为控件使用这些attribute。...public static final int PieChart_pointerRadius = 8; 2.2 使用attribute 在attr.xml中定义好属性后,布局文件中,声明控件的地方就可以指定这些属性值了...下面在更具体地提出一个个问题、要完成的功能时,有时会直接对PieChart类引入新的字段、方法、类等来作为实现。 8....转动动画的值的计算是Scroller完成的,这里使用ValueAnimator来获得每一帧的回调。 在解决了如何实现让PieView不断绘制的问题后,下一个要解决的是每次绘制多少度的问题。

    1.9K50

    android自定义控件一站式入门

    attribute表示可以在布局xml文件中定义View时使用的xml元素名称,例如layput_width,padding这样的。...Android提供了统一的通过xml为创建的控件对象提供初始值的方式: 为控件定义xml中使用的attribute。 在布局文件中为控件使用这些attribute。...public static final int PieChart_pointerRadius = 8; 2.2 使用attribute 在attr.xml中定义好属性后,布局文件中,声明控件的地方就可以指定这些属性值了...下面在更具体地提出一个个问题、要完成的功能时,有时会直接对PieChart类引入新的字段、方法、类等来作为实现。 8....转动动画的值的计算是Scroller完成的,这里使用ValueAnimator来获得每一帧的回调。 在解决了如何实现让PieView不断绘制的问题后,下一个要解决的是每次绘制多少度的问题。

    1.7K00

    Android应用setContentView与LayoutInflater加载解析机制源码分析

    前面分析《Android触摸屏事件派发机制详解与源码分析三(Activity篇)》时提到了一些关于布局嵌套的问题,当时没有深入解释。...2-5 setContentView源码分析总结 可以看出来setContentView整个过程主要是如何把Activity的布局文件或者java的View添加至窗口里,上面的过程可以重点概括为: 创建一个...3-1 通过实例引出问题 在开始之前我们先来做一个测试,我们平时最常见的就是ListView的Adapter中使用LayoutInflater加载xml的item布局文件,所以咱们就以ListView为例...但是使用merge标签还是有一些限制的,具体是:merge只能用在布局XML文件的根元素;使用merge来inflate一个布局时,必须指定一个ViewGroup作为其父元素,并且要设置inflate的...setContentView整个过程主要是如何把Activity的布局文件或者java的View添加至窗口里,重点概括为: 创建一个DecorView的对象mDecor,该mDecor对象将作为整个应用窗口的根视图

    46920

    Android LayoutParams详解「建议收藏」

    提示:本文的源码均取自Android 7.0 前言 在平时的开发过程中,我们一般是通过XML文件去定义布局,所以对于LayoutParams的使用可能相对较少。...基础知识 LayoutParams是什么 LayoutParams翻译过来就是布局参数,子View通过LayoutParams告诉父容器(ViewGroup)应该如何放置自己。...ViewGroup实现了以下五种addView方法的重载版本: /** * 重载方法1:添加一个子View * 如果这个子View还没有LayoutParams,就为子View设置当前ViewGroup...其实最典型的例子就是在Activity中调用setContentView方法,系统会通过LayoutInflater将整个XML文件解析为View Tree,从根布局开始为每个View和ViewGroup...此外,还需要在XML文件中定义declare-styleable资源属性,一般会创建一个名为attrs.xml文件放置这些属性。

    2.3K10

    Android自定义View-入门(明白自定义View和自定义ViewGroup)

    那么google 是如何做到把一个 int同时放测量模式 和尺寸信息呢?...我们知道 int型数据占用 32个bit,而google实现的是,将 int数据的前面2个 bit用于区分不同的布局模式,后面 30个bit 存放的是尺寸的数据 如何提取测量模式与尺寸呢?...自定义布局属性 如果有些属性我们希望由用户指定,只有当用户不指定的时候采用我们硬编码的值,比如上面的默认尺寸,我们想要由用户自己在布局文件里面指定该怎么做呢?...所以这个时候就需要我们自定属性,让用户用我们定义的属性。 过程 首先我们需要在 res/values/styles.xml 文件(如果没有就需要新建),里面声明一个我们自定义的属性: <!...实例Demo 我们仿照LinearLayout的垂直布局,将子view按从上到下垂直顺序一个接一个摆放。

    1.2K30

    自定义View开篇,必须跨过的一道坎儿

    ,还是感觉无从下手,其实想学好自定义View,只有一个字,'练",从今天开始我会持续开始写自定义View系列的文章,一方面巩固自己的基础,另一方面温故而知新。...如何处理wrap_content问题 首先我们举个例子 绘制一个简单的圆形。...如何支持padding 首先我们将布局文件设置为match_parent,设置上下左右边距为50dp <com.support.hlq.layout.CircleView android:padding...考虑到上面几个问题之后,一个自定义View就比较合格了,不过还缺点什么,比如 如何通过xml设置属性呢?...如何通过xml文件给自定义设置属性 上面例子中,绘制了一个红色的圆形,我们来通过xml属性配置绘制图形的颜色 以及 画笔的style吧 首先新建cycle_attr.xml文件 <?

    77310

    Android 布局优化真的难,从入门到放弃

    image.png 前言 Android的绘制优化其实可以分为两个部分,即布局(UI)优化和卡顿优化,而布局优化的核心问题就是要解决因布局渲染性能不佳而导致应用卡顿的问题,所以它可以认为是卡顿优化的一个子集...以上两点就是布局加载可能导致卡顿的原因,也是布局的性能瓶颈。 2获取布局文件加载耗时的方法 我们如果需要优化布局卡顿问题,首先最重要的就是:确定定量标准。...它的主要是思路是在编译期,将需要翻译的layout翻译生成对应的java文件,这样对于开发人员来说写布局还是写原来的xml,但对于程序来说,运行时加载的是对应的java文件。...Compose方案 Compose 是 Jetpack 中的一个新成员,是 Android 团队在2019年I/O大会上公布的新的UI库,目前处于Beta阶段。...总结 本文主要介绍了以下内容: 1.andrid绘制原理与布局加载原理。 2.如何定量的获取android布局加载耗时。

    91610

    View绘制流程深度剖析之-inlate

    ,二是指出我认为的几个重点,帮助我们没有看过源码的人去了解将xml布局加载到代码中的过程。...第一个问题:LayoutInflater.inflate两个个方法是什么? 这个问题是最简单的,基本上这两个方法都使用过,但是使用的结果却是不一样的。...= null) { // root存在才会解析xml根布局的宽高(如果xml文件中设置的话) params = root.generateLayoutParams...文件,然后创建对应的Constructor文件,通过调用Constructor.newInstance创建对应的View对象,这就是将xml文件解析成java对象的过程。...: inflate方法的第二个参数root不为null,加载xml文件时根视图才有具体宽、高属性; inflate方法的第三个参数attachToRoot是true时,解析的xml布局会被添加到root

    57030

    再看LayoutInflater,这次你可能又会有新的认识

    那么通过xml编写的布局文件是如何转换成Android中的一个View对象从而显示在应用程序当中的呢?这就是LayoutInflater的作用了。...简单来说,LayoutInflater的工作就是将使用xml文件编写的布局转换成Android里的View对象,并且这也是Android中将xml布局转换成View的唯一方式。...这也是inflate()方法第二个参数root的作用,就是给当前要解析加载的xml布局指定一个父布局。 那么一个布局可不可以没有父布局呢?...当然也是可以的,这也是为什么root参数被标为@Nullable的原因。 但是如果我们inflate出来了一个没有父布局的布局,又该如何去展示它呢?...另外,如果不为inflate出来的布局指定父布局,还会出现另外一种问题,我们通过一个例子来讲解一下。 这里我们定义一个button_layout.xml布局文件,代码如下所示: <?

    63100

    Android布局优化之ViewStub、include、merge使用与源码分析

    例如你有五个界面,这五个界面的顶部都有布局一模一样的一个返回按钮和一个文本控件,在不使用include的情况下你在每个界面都需要重新在xml里面写同样的返回按钮和文本控件的顶部栏,这样的重复工作会相当的恶心...使用include标签,我们只需要把这个会被多次使用的顶部栏独立成一个xml文件,然后在需要使用的地方通过include标签引入即可。...其实就是减少在include布局文件时的层级。标签是这几个标签中最让我费解的,大家可能想不到,标签竟然会是一个Activity,里面有一个LinearLayout对象。...例如我们在复用一个含有多个子控件的布局时,肯定需要一个ViewGroup来管理,例如这样 : android="http://schemas.android.com...在开发过程中,我们一定要尽量去深究一些常用技术点的本质,这样才能避免出了问题不知如何解决的窘境。追根究底才能知道为什么是这样,也是自我成长的必经之路。

    1.2K20

    Android布局优化:include 、merge、ViewStub的详细总结

    一、include的用法以及注意点 在开发Android布局时,我们常将一些通用的视图提取到一个单独的layout文件中,然后使用标签在需要使用的其他layout布局文件中加载进来,比如我们自己...布局文件有多个include标签需要设置ID,才能找到相应子View的控件,否则只能找到第一个include的layout布局,以及该布局的控件。...include标签存在着一个不好的地方,可能会导致产生多余的布局嵌套。同样通过一个小demo来说明: 比如项目中有一个公共的登录按钮布局,如下: login.xml: 问题,其实不知不觉中我们多嵌套了一层布局。我们用工具查看一下此时布局结构: ?...ViewStub主要属性以及方法说明如下: android:layout属性 加载包含的layout布局文件; android:inflatedId属性 重写包含的layout布局文件的根容器id;

    2.2K50

    kotlin-android-extensions插件也被废弃了?扶我起来

    比如说这里有一个布局文件activity_main.xml: android="http://schemas.android.com/apk/res/android...当然,如果有些布局文件你不希望为它生成对应的Binding类,可以在该布局文件的根元素位置加入如下声明: <LinearLayout xmlns:tools="http://schemas.android.com...首先我们要调用activity_main.xml布局文件对应的Binding类,也就是ActivityMainBinding的inflate()函数去加载该布局,inflate()函数接收一个LayoutInflater...假设我们有一个布局文件叫fragment_main.xml,那么启用ViewBinding功能之后,则必然会生成一个与其对应的FragmentMainBinding类。...那么如何解决这个问题呢?很简单,我们只需要在include的时候给被引入的布局添加一个id,如下所示: xml version="1.0" encoding="utf-8"?

    3.7K31

    安卓软件开发:使用AndroidView(MDC)实现高级轮播图App-下篇

    4.1.1 开发模式:传统 VS 声明式 MDC:基于传统的 View 系统 MDC 是建立在 Android 的 View 系统之上的,开发界面的时候,你需要写 XML 文件来定义布局,并通过 Java...4.3 布局管理:XML VS Kotlin 代码 MDC:XML 文件布局 MDC 使用的是传统的 XML 文件布局,像 LinearLayout、RelativeLayout 等都是通过 XML 定义的...例如, XML 布局文件: <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content...UI 和状态的绑定让开发不再需要手动管理视图更新,代码很简洁清晰,维护成本也非常低。 五、总结 在这篇文章中,展示了如何使用 MDC(Android View)实现一个高级轮播图组件。...对于那些依赖旧版框架或者不希望立即切换到新框架的开发者来说,MDC 是一个非常稳定的解决方案。 有任何问题欢迎提问,感谢大家阅读 )

    60181

    Android Fragment 使用

    ,什么是Fragment,Fragment生命周期,如何静态和动态的使用Fragment,Fragment回退栈,Fragment事务;以及Fragment的一些特殊用途,例如:没有布局的Fragment...,把Fragment当成普通的控件,直接写在Activity的布局文件中。...步骤: 1、继承Fragment,重写onCreateView决定Fragemnt的布局 2、在Activity中声明此Fragment,就当和普通的View一样 下面展示一个例子(我使用2个Fragment...作为Activity的布局,一个Fragment用于标题布局,一个Fragment用于内容布局): TitleFragment的布局文件: 的使用Fragment 上面已经演示了,最简单的使用Fragment的方式~下面介绍如何动态的添加、更新、以及删除Fragment 为了动态使用Fragment,我们修改一下Actvity的布局文件

    47720
    领券