传统的做法 定义一个(或多个)显示不同加载状态的控件或者xml布局文件(例如:LoadingView) 每个页面的布局中都写上这个view 在BaseActivity/BaseFragment中封装LoadingView...font> 在BaseActivity/BaseFragment的子类中可通过上一步的封装比较方便地使用加载状态显示功能 这种封装的好处是通过封装动态地创建LoadingView并添加到指定的父容器中,...时,动态新建一个FrameLayout布局 将原View从ParentView中移除,并用它的LayoutParams将FrameLayout添加到ParentView中替代原View在ParentView...:gloading:1.0.0' 2、 创建Adapter,在getView方法中实现创建各种状态视图(加载中、加载失败、空数据等)的逻辑 Gloading不侵入UI布局,完全由用户自定义。...,无需在app层执行注册,耦合度更低 4、在需要使用LoadingView的地方获取Holder //在Activity中显示, 父容器为: android.R.id.content Gloading.Holder
传统的做法 定义一个(或多个)显示不同加载状态的控件或者xml布局文件(例如:LoadingView) 每个页面的布局中都写上这个view 在BaseActivity/BaseFragment中封装LoadingView.../BaseFragment的子类中可通过上一步的封装比较方便地使用加载状态显示功能 这种封装的好处是通过封装动态地创建LoadingView并添加到指定的父容器中,让具体页面无需关注LoadingView...,动态新建一个FrameLayout布局 将原View从ParentView中移除,并用它的LayoutParams将FrameLayout添加到ParentView中替代原View在ParentView...:gloading:1.0.0' 2、 创建Adapter,在getView方法中实现创建各种状态视图(加载中、加载失败、空数据等)的逻辑 Gloading不侵入UI布局,完全由用户自定义。...,无需在app层执行注册,耦合度更低 4、在需要使用LoadingView的地方获取Holder //在Activity中显示, 父容器为: android.R.id.content Gloading.Holder
零、前言 [1].每次写Fragment要加载布局,为布局设置内容,挺麻烦的,搞个基类简单封装一下吧 [2].一般封装基类使用模板方法设计模式,基类中做一些常用的不变东西,需要拐点弯的逻辑就弄个抽象方法延迟到子类...Fragment封装.png 一、代码实现 1.使用:EVAFragment继承 public class EVAFragment extends BaseFragment { @...xml version="1.0" encoding="utf-8"?..." android:orientation="vertical" tools:context=".activity.ActFragmentActivity"> FrameLayout...="60dp"> FrameLayout> fragment_title.xml android="http://
那么如果考虑低版本的使用情况你就需要用fill_parent了 ViewGroup.MarginLayoutParams类: image.png Android UI组件的层次结构 image.png...UI界面的控制 1.在XML布局文件中控制UI界面 2.在java代码中控制UI界面 3.使用XML和java代码混合控制UI界面 4.开发自定义的View 代码控制UI的页面实例: package...(textView); } } Theme(主题) image.png 一开始建立项目的时候有主题选择的选项,对应manifest的这一段 res的style.xml中可以调节主题的一些选项 image.png...红色框框中的内容可以选择主题,更改主题栏的内容,如上的主题就是有主题栏并且文字为AndroidManifest.xml中android.label的内容。...相同点 都能修改statusBar的颜色 Android 5.0以上才支持 不同点 statusBarColor具有更高的优先级 statusBarColor在Android 5.0以下的版本中会发出提示警告
在最近公布的比赛框架中,发现了页面加载管理类,觉得挺有用的,所以做个简单的笔记。 什么是页面加载管理类呢?...FrameLayout> 加载失败 FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns...xml version="1.0" encoding="utf-8"?...> 加载成功 这个布局就不用写了,就是你自己要显示的布局 那么具体在代码中如何使用呢,我们看下面这个Demo。...先是一个BaseFragment的基类。
下载的其中一个框架的例子是没有actionBar的,example_update 引入出错可能是俩个v4包冲突了,删掉工程里的一个,不要删了库里的,如果还有错误看probles里说什么或者重启,或者选中工程右键...而我的问题是软件里自带的v7程序里的v4包和库里的v4包冲突了,我将这个替换掉,发现以前所有的工程都报错了,发现里这些工程里的包重新导一下就可以了,可是有xutils的工程不行,可能xutils的v4冲突把...引入SlidingMenu的库文件 - 2. Activity继承SlidingFragmentActivity - 3....framelayout,因为他们是用来放frame的,而侧边栏也需要写个fargment用来放继承fargment的那个对象 FrameLayout xmlns:android="http://schemas.android.com...="match_parent" >FrameLayout>FrameLayout xmlns:android="http://schemas.android.com/apk/res/android
可以在一个 Activity 中组合多个片段,从而构建多窗格界面,并在多个 Activity 中重复使用某个片段。...可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且可以在 Activity 运行时添加或移除片段(这有点像可以在不同 Activity 中重复使用的“子...如要从 onCreateView() 返回布局,可以通过 XML 中定义的布局资源来扩展布局。为帮助您执行此操作,onCreateView() 提供了一个 LayoutInflater 对象。...container 参数是片段布局将插入到的父级 ViewGroup(来自 Activity 的布局)。...传递 container 对系统向扩展布局的根视图(由其所属的父视图指定)应用布局参数具有重要意义。 指示是否应在扩展期间将扩展布局附加至 ViewGroup(第二个参数)的布尔值。
在Android x以前,我们实现懒加载通常是通过 setUserVisibleHint 方法来控制Fragment是否可见。在Android x之后,Google 提供了新的方案给我们。...,也就是你可以设置这个Fragment最大生命周期限制,如果生命周期执行超过了设置的片段,则会强制降至正确的生命周期。...> FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com...,至于它们是干什么的,我们具体继续往下看:当然结合我们开始时的Demo,从注释中也能看出端倪。...onResume中。
大家好,又见面了,我是全栈君。 Activity中包含views和ViewGroups(视图组)。 Android中的View与我们以前理解的“视图”不同。...在Android中,View比视图具有更广的含义,它包含了用户交互和显示,更像Windows操作系统中的window。...ViewGroup是View的子类,所以它也具有View的特性,但它主要用来充当View的容器,将其中的View视作自己的孩子,对它的子View进行管理,当然它的孩子也可以是ViewGroup类型。...我们也可以自定义自己的布局,以方便日后使用和维护,这时我们就需要继承ViewGroup类并在派生类中重写ViewGroup的一些方法, ViewGroups的例子:LinearLayout和FrameLayout...Android提供了以下的ViewGroups: LinearLayout AbsoluteLayout TableLayout RelativeLayout FrameLayout ScrollView
概述 官方API ---- Fragment是什么 Android 在 Android 3.0(API 11 级)中引入了Fragment,主要是为了给大屏幕(如平板电脑)上更加动态和灵活的 UI 设计提供支持...由于平板电脑的屏幕比手机屏幕大得多,因此可用于组合和交换 UI 组件的空间更大。利用片段实现此类设计时,您无需管理对视图层次结构的复杂更改。...通过将 Activity 布局分成片段,您可以在运行时修改 Activity 的外观,并在由 Activity 管理的返回栈中保留这些更改。...例如:新闻应用可以使用一个片段在左侧显示文章列表,使用另一个片段在右侧显示文章—两个片段并排显示在一个 Activity 中,每个片段都具有自己的一套生命周期回调方法,并各自处理自己的用户输入事件。...也就是说,由于每个片段都会通过各自的生命周期回调来定义其自己的布局和行为,您可以将一个片段加入多个 Activity,因此,您应该采用可复用式设计,避免直接从某个片段直接操纵另一个片段。
View和Activity的区别 android的四大组件,Activity是四大组件中唯一一个用来和用户进行交互的组件。可以说Activity就是android的视图层。...Android中控件大致被分为两类ViewGroup,View。ViewGroup作为容器管理View。Android视图,是类似于Dom树的架构。父视图负责测量定位绘制等操作。...这种从根到叶的组合方式,我们可以看做成一个View树。(类似于XML),而View的显示和事件处理,都是依赖于这个View树。 绘制和事件处理的起始点,都是从根View开始一级一级的往下传递。...绘制从根视图开始,从上至下遍历整棵视图树,每一个ViewGroup负责让自己的子View被绘制,每一个View负责绘制自己,通过draw()方法.绘制过程分三步走。...Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用
大家好,又见面了,我是你们的朋友全栈君。...普通视图还是布局都继承自 View ,其中 ViewGroup 就是所有布局的父类, ViewGroup 继承自 View 同时可以对 View 进行管理 ( 编排,控制 View 显示位置和大小 )主要掌握以下三种布局...” /> FrameLayout> 其中孩子中可以使用 android:layout_gravity 来调整自己在父容器中的位置 ( 主动权在孩子身上 ) ,跟 android:gravity 不一样的是...> TableLayout 表格布局继承自LinearLayout,通过TableRow设置行,列数由TableRow中的子控件决定, 直接在TableLayout中添加子控件会占据整个一行。...TableLayout(表格布局)其实有点大同小异; 不过新增了一些东西 1、跟LinearLayout(线性布局)一样,他可以设置容器中组件的对齐方式 2、容器中的组件可以跨多行也可以跨多列(相比TableLayout
定义布局 : 在XML文件中使用TabHost组件, 并在其中定义一个FrameLayout选项卡内容; b....继承TabActivity : 显示选项卡组件的Activity继承TabActivity; c. 获取组件 : 通过调用getTabHost()方法, 获取TabHost对象; d....根标签及id 设置Android自带id : XML布局文件中, 可以使用 标签设置, 其中的id 需要引用 android的自带id : android:id="@android:id...FrameLayout组件 组件作用 : 该组件中定义的子组件是TabHost中每个页面显示的选项卡, 可以将TabHost选项卡显示的视图定义在其中; 设置android自带id : 这个组件的id要设置成...获取TabHost 获取方法 : getHost(); 前提 : 调用getHost()方法获取TabHost组件的方法的前提是在布局文件中, 设置了android自带的id android:id="@
android视图构成 ?...的一个具体的类,该类内部包含了一个DecorView对象,该DectorView对象是所有应用窗口(Activity界面)的根View DecorView继承FrameLayout,里面id=content...依据Feature等style theme创建不同的窗口修饰布局文件,并且通过findViewById获取Activity布局文件该存放的地方(窗口修饰布局文件中id为content的FrameLayout...View默认不会绘制任何内容,真正的绘制都需要自己在子类中实现。 View的绘制是借助onDraw方法传入的Canvas类来进行的。...区分View动画和ViewGroup布局动画,前者指的是View自身的动画,可以通过setAnimation添加,后者是专门针对ViewGroup显示内部子视图时设置的动画,可以在xml布局文件中对ViewGroup
网上也有一些开源的组件,大部分都是自定义继承某个布局在xml中让其作为跟布局,然后将自己的内容布局添加进去,效果也都不错,但是个人总觉得稍微有些麻烦,不是那么灵活,n多个xml布局都去定义,写的心烦,所以有了今天的主角...实现 1.代码设计 首先我们定义PageLayout继承FrameLayout或者LinearLayou或者其他的布局都可以,然后我们需要提供切换四个布局的功能,当然如果支持自定义就更好了,还有状态布局里面的一些属性...1.Activity 如果我们要切换的跟布局是个Activity时,首先我们需要了解一下Android中的setContentView()方法,很熟悉,是我们新建完Activity后默认会在生命周期方法...,Window才是真正的显示视图。...,也挺简单,目前没提供xml方式,PageLayout的初衷就是模仿AlertDialog方式,随时随地使用状态布局切换 你也可以在BaseActivity和BaseFragment中进行PageLayout
上一篇文章我们分析了View的加载流程,今天我们继续来深入学习View的绘制流程,接着上次的View绘制开始,同样使用的是Android 7.1源码。...得到了当前视图的正确大小之后,FrameLayout类的onMeasure方法就可以调用从父类View继承下来的setMeasuredDimension方法来将它们为当前视图的大小了。...计算的根据是在xml文件或者代码中设置的宽度和高度的参数,参数指明了要求你是填充父控件(match_parent)还是包裹内容(wrap_content)还是精确的一个大小,但最终你的大小不应该超过父控件给你提供的空间...View类的setFrame方法 该方法先判断当前视图的大小或者位置是否发生变化,将参数保存起来。当前视图距离父视图的边距一旦设置好之后,它就是一个具有边界的视图了。...需要注意的是FrameLayout布局其实在View类中的layout方法中已经实现,布局的逻辑实现是在父视图中实现的,不像View视图的measure测量,通过子类实现onMeasure方法来实现测量逻辑
二、继承TabActivity实现 通过继承TabActivity类,使用TabHost的一般步骤如下。 在界面布局文件中定义TabHost组件,并为该组件定义该选项卡的内容。...继续使用WidgetSample工程的advancedviewsample模块,在app/main/res/layout/目录下创建tabhosttab_layout.xml文件,在其中填充如下代码片段...上面这三个ID并不是开发者自己定义的,而是引用了 Android系统已有的ID。 接下来主程序即可加载该布局资源,并将布局文件中的三个Tab页面添加到该TabHost 容器中。...三、继承Activity实现 与继承TabActivity实现TabHost大体步骤差不多,唯一的区别就是没有TabActivity系统封装,必须由开发者自己获取TabHost组件而已。...在上面的示例基础上进行修改,创建tabhost_layout.xml文件,在其中填充如下代码片段: xml version="1.0" encoding="utf-8"?
这几种布局及其子元素共同支持的XML属性: android:layout_gravity:设置该子元素在父容器中的对齐方式。...RelativeLayout子元素支持的常用XML属性: android:layout_centerHorizontal:控制该子组件在布局容器中是否水平居中。...FrameLayout常用XML属性: android:foreground:设置该帧布局的前景图像。 android:foregroundGravity:定义绘制前景图像的gravity属性。...TableLayout 表格布局继承了LinearLayout,因此它的本质依然是线性布局。 表格布局通过添加TableRow、其他组件来控制表格的行数和列数。...在表格布局管理器中,可以为单元格设置如下3种行为方式: Shrinkable:该列的所有单元格宽度可以被收缩,以保证该表格能适应父容器的宽度。
历经13年的打磨和沉淀,Android体系与社区生态已非常成熟,开发者从最初的框架少、没规范、代码都得自己写,到轮子、框架满天飞。...Kotlin特性为Android、Jetpack提供一些简易易用的扩展; Multidex→ 为具有多个Dex文件应用提供支持; Test→ 用于单元和运行时界面测试的 Android 测试框架; Benchmark... 编译后,AGP会为Module中包含的XML布局文件生成一个绑定类,类名规则: XML文件名转换为Pascal大小写,并加上Binding,比如:result_profile.xml...所以有必要封装优化一波~ 4.封装优化思路 ① 泛型 + 父类实现模板代码 最容易想到的常规写法,配合泛型,把模板代码都在父类中写好,非常简单: abstract class BaseFragment...具体构造过程,感兴趣的可以自己翻阅下此文件。
领取专属 10元无门槛券
手把手带您无忧上云