前言 我们开发时接触最多的就是xml布局了,还记得我们写Android的第一个Hello World吗,就是通过activity_main.xml显示出来的。...,不显示还是因为draw方法为空,跟上面的Space同出一辙。...而右边如果想要指定一个位置换行,可以了解一下Barrier~ xml代码就不贴了,已上传到Github,点击查看 include 当我们在写一个复杂的页面时,xml代码可能有几百行甚至几千行,阅读起来总是很麻烦...,当子layout嵌入在父layout中时,只需要使用tools:showIn在子layout的根布局指定父layout,就可以实时预览在父layout中的效果了。...TextView /> 如上,当有多个TextView之间需要添加分割线的时候,就只能一个一个复制,复制其实也没什么,就是代码看起来不优雅。
3.3.2 创建 item 布局 创建列表的 item 布局文件 layout_item.xml, 简单添加一个 TextView 进行演示,代码如下: <?...里子元素类型一致 3.3.3 创建 RecyclerView 数据和 item 布局都准备好了,下面就是在页面的 activity_recycleview_simple.xml 布局里创建 RecyclerView...,如果为空则调用 super 方法,即默认的 item 布局类型。...具体实现首先获取 RecyclerView 当前的 adapter,如果当前 adapter 为空则创建一个 DefaultBindingAdapter ,然后设置列表数据、item 点击事件、多 item...布局类型的创建器、item 内部事件处理器,最后把 adapter 设置给 RecyclerView;如果 adapter 不为空,且类型为 BaseBindingAdapter则重新设置一遍 adapter
工作原理:当屏幕需要显示x个item时,那么ListView只会创建x+1个视图,当第一个item离开屏幕时,此item的view就会被拿来重用(用于显示下一个item(即第x+1个)的内容)。...工作原理实例 假如屏幕只能显示7个item,那么ListView只会创建(7+1)个item的视图。当第1个item离开屏幕时,此item的view就会被拿来重用(用于显示第8个item的内容)。...android:listSelector 指定被选中的列表项上绘制的Drawable android:scrollingCache 滚动时是否使用缓存 如果设置为true,则在滚动时将会使用缓存 android...在xml文件布局添加资源文件TextView,该TextView组件将作列表项的组件 xml version="1.0" encoding="utf-8"?...工作原理 当屏幕需要显示x个item时,那么ListView只会创建x+1个视图,当第一个item离开屏幕时,此item的view就会被拿来重用(用于显示下一个item(即第x+1个)的内容)。
在Android5.0版本之后,Android官方推出了一个新的控件:RecyclerView ,完全解耦的设计使得RecyclerView比起ListView灵活了太多,应用的场合也非常广泛。...每一行项目是一个ImageView和TextView控件的组合。 新建一个 Android 工程: activity_main.xml: RecyclerView,笔者这里选择的是新建一个Activity来显示RecyclerView: 因为RecyclerView是在android5.0版本新增在support.v7...> 这个布局文件就是加入了一个RecyclerView控件,注意我们在使用不是SDK中原本就存在的控件时,要写入这个控件的完整路径名(包括我们自定义的控件),接下来新建一个Activity用于显示RecyclerView...* 因为RecyclerView只负责自己本身的创建和回收,所以RecyclerView中的子项创建、子项布局方式、 * 分割线、动画效果等等都需要我们自己完成,正是这种完全解耦的机制成就了
1.1 DataBinding 的本质 应该不少人和我以前一样,对 DataBinding 的认知就是 在xml中写逻辑: TextView android:layout_width...textView为啥要判空呢?...而user是否为空 DataBinding也会自动处理:在表达式 @{user.name} 中,如果 user 为 Null,则为 user.name 分配默认值 null。...并且,当该 user.name 被 set 新值时,被绑定了该数据的控件即可获得通知和刷新。...当状态数据变化时,只需手动地完成 setValue,这将通知 DataBinding 去刷新 该数据 绑定的控件。 而,文章开头提到的把逻辑放入xml中的写法,是不建议的。
也可以提升APP性能,帮助避免内存泄露以及空指针的问题。...layout.xml文件(如activity_main.xml): 与原来的XML文件不同的是,根节点的为layout,而不是具体的ViewGroup。...中的使用 同在RecyclerView中的Item也可以使用DataBinding,在onCreateViewHolder中保存生成的Binding对象,在复用时,更新数据即可。...RecyclerView的product_item.xml文件如下: android="http://schemas.android.com/apk/res/android"...RecyclerView的时候,经常配合DiffUtil来进行数据的增量更新操作 注意事项 在使用数据的时候,属性必须是public或者提供了setter,getter方法,否则编译不过,无法生成Binding
前言 这两天在做一个新的APP,在考虑用户体验上要一个两级的列表嵌套,于就想看看RecyclerView是否能做出这样的效果,自己写了一个DEMO来做一下测试,最后的效果还是比较满意的。...里增加一个TextView和一个Button,用于我们先创建模拟的数据。...---- 创建最底层的RecyclerView 布局文件 我们在layout下新建一个rcl_item.xml ? xml version="1.0" encoding="utf-8"?...---- 创建顶层的RecyclerView 布局文件 在layout下创建一个rcl_main.xml文件 ? xml version="1.0" encoding="utf-8"?...然后我们通过创建GridLayoutManager把子的RecyclerView改为Grid为两排的布局。 ?
先写空数据布局,在layout下新建一个layout_empty_data.xml,里面的代码如下: xml version="1.0" encoding="utf-8"?...三、列表适配器 首先写item的布局,在layout下新建item_history_rv.xml,里面的代码如下: xml version="1.0" encoding="utf-8"?...五、保存历史记录 在前面的文章中当进行分类时,会关联出很多物品,而我们要保存和我输入物品的一致性才行,比如当我搜索水杯时,会出现的结果有:水杯、保温杯、汽车杯等一些物品。...而我只需要保存水杯的结果到历史记录就可以了。那么在写保存方法时首先要比对这个搜索结果。一致才保存。 下面来写代码,这里我还是写一个帮助类。...下面来看看全部删除,这里我们就写的简单一些,打开activity_history.xml,在toolbar控件中,增加一个全删,如下所示: TextView android
前言 Hello 艾维巴蒂,今天给大家介绍一下 ListView和 GridView的“大哥“— RecyclerView,这个控件是当下最流行且最常用的一个控件,并且在实战项目中它随处可见,而为什么将它称为..." android:background="@color/white" /> 如果想去掉可滑动控件滑动到边缘的光晕效果,小伙伴们可以这样试试: //在xml...在Adapter中必须实现的三个方法: a、//列表页需要知道有多少个条目publicintgetItemCount() b、//创建一个ViewHolder,我们可以根据viewType的不同而创建不同的...holder, final int position) { final String str = mList.get(position); //判断String传值是否为空...2、网格样式支持 item 占据多列的宽度;瀑布流支持 item 占据总列数的宽度,不支持只占据其中几列。 3、当设置为水平方向样式时,以上结论中行列对调,宽度高度对调。
前言 伟大的Google为Android推出了一系列的兼容包,最新的就是Design Support Library了,这里我们结合v7和v4中的几个控件,来主要学习Design Support Library...因此,我们这里将布局文件XML源码贴出来供学习,放心,所有知识点都已经注释在源码中。...本例中,TabLayout在界面滚动时,随着Toolbar的逐渐隐藏,将占据Toolbar的位置, 达到节省屏幕空间,界面动画效果的目的。...exitUntilCollapsed: 当视图会在滚动时,它一直滚动到设置的minHeight时完全隐藏。...当设置了layout_behavior的控件滑动时,就会触发设置了layout_scrollFlags的控件发生状态的改变。
在Activity中使用ViewBinding 一旦启动了ViewBinding功能之后,Android Studio会自动为我们所编写的每一个布局文件都生成一个对应的Binding类。...接下来就更加简单了,调用Binding类的getRoot()函数可以得到activity_main.xml中根元素的实例,调用getTextView()函数可以获得id为textView的元素实例。...接下来不一样的地方在于,由于我们是在onCreateView()函数中加载的布局,那么理应在与其对应的onDestroyView()函数中对binding变量置空,从而保证binding变量的有效生命周期是在...="Done" /> 可以看到,这里最外层的布局使用了merge标签,这就表示当有任何一个地方去include这个布局时,会将merge标签内包含的内容直接填充到include的位置...首先为了避免崩溃,我们应该将activity_main.xml中引入布局时指定的id移除,如下所示: android="http://schemas.android.com
Android 音乐APP 启动优化 前言 Android应用冷启动时,又会短暂的黑屏或者白屏,然后才会进入主页面,黑屏是在Android版本低的时候才会出现,比如Android4.4、5.0。...因为我在布局中放了一个相对布局,里面有两个TextView,第二个盖住了第一个。第二个是黑色背景黑色文字,但是它的宽高和第一个TextView是一样的。...而我要做的效果是文字逐渐出现,从左至右,所以只要将第二个TextView向右位移TextView的宽度即可。移动时间为1s,然后监听这个动画,当动画结束时,进入MainActivity,水道渠成。...首先进入activity_local_music.xml,然后给之前扫描音乐的按钮增加一个id并修改点击按钮所触发的方法。 ? 然后在创建一个location_music.xml。...下面在initView方法中增加对RecyclerView的滚动监听。
在XML文件的layout标签下,创建data标签,在data标签中再创建variable标签,variable标签主要用到的就是name属性和type属性,类似于Java语言声明变量时,需要为该变量指定类型和名称...布局表达式不仅可以传入对象的属性,也可以调用对象的方法。首先创建一个工具类,在类中定义响应事件的方法,如下所示。...属性,当使用了DataBinding的布局文件被渲染时,属性所对应的static方法就会自动调用。...五、在RecyclerView中使用DataBinding 5.1 基本使用 列表布局在Android应用开发中是非常常见的场景,实现列表布局需要使用RecyclerView控件,DataBinding...在RecyclerView中使用DataBinding就是如此简单,当List中的item数据发生变化时,列表中的内容也会随之更新。
在Android studio 工程中的app目录下的buil.gradle文件中加上上图划出的代码,之后点击右上角的 async now 蓝色字体,android studio 就会为我们添加对RecyclerView...控件的依赖,我们就可以在程序中使用它,下面是 activity_main.xml: 的继承于 RecyclerView.ItemDecoration 类的自定义类来进行改写,加入我们自己的逻辑: 在工程中新建一个类MyItemDecoration.java: import...GRID_LAYOUT_ORIENTATION_VERTICAL) { gridLayoutItemDecoration(c, parent); } } /* * 当排布方式为线性布局的时候...canvas); child = parent.getChildAt(i); } } } /* * 当排布方式为网格布局的时候
的使用 在使用RecyclerView时候,必须指定一个适配器Adapter和一个布局管理器LayoutManager。...我们这样思考,当我们去完成一个界面的布局时,我们要向里面传数据,怎么去传呢?全写在xml文件里显而不合适,这就是Adapter的作用。...后所跟数字相同,如下图所示 修改原有xml文件 为了实现RecyclerView,我们将初始的xml文件修改为ConstrainLayout(约束布局)并添加RecyclerView 代码如下: 的数据附加适配器 创建适配器实现步骤如下: ① 创建Adapter:创建一个继承RecyclerView.Adapter的Adapter类...② 创建ViewHolder:在Adapter中创建一个继承RecyclerView.ViewHolder的静态内部类。
) lateinit var todoContent: TextView 其中,lateinit 修饰符允许声明非空类型,并在对象创建后(构造函数调用后)初始化。...Anko DSL 创建了一个垂直方向的线性布局(用代码写配置写布局要比 XML 灵活方便多了)。...在 verticalLayout 代码段内部,创建了三个Android的控件 - 两个 editText 视图和一个 button 视图。这里视图的属性都在一行里面设置好了。...这些 ids 需要手工在一个加做 ids.xml 的文件里创建,这个文件放在 app/src/main/res/values/ids.xml。如果这个文件不存在就创建它。文件内容如下: <?...: 配置项 功能说明 app:rrvEmptyLayoutId 当列表为空的时候的显示页面 app:rrvIsRefreshable 是否支持下拉刷新,通过setOnRefreshListener 或
28.0.0' 添加完成后,在右上角有一个同步Sync Now的提示,点击进行同步构建,接下来修改activity_main.xml的代码 2、在 activity_main.xml 布局文件中加入RecyclerView...> 接着创建RecyclerView的列表项布局 <?..." android:src="@drawable/image1" /> 3、然后创建 RecyclerView 的数据适配器 package com.newland.project3...; import android.widget.TextView; public class MonitorAdapter extends RecyclerView.Adapter<MonitorAdapter.ViewHolder...(); //添加Android自带的分割线 recyclerView.addItemDecoration(new DividerItemDecoration(this,
TextView TextView 是一个用于显示文本的控件。它可以用来显示短句、段落或者标题。 属性 android:text: 设置显示的文本。...示例 xml 复制代码 TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android...Switch Switch 是一个切换开关控件,用于在开和关之间切换状态。 属性 android:textOn: 设置开状态时的文本。 android:textOff: 设置关状态时的文本。...使用步骤 定义布局: 创建一个包含 RecyclerView 的布局。 创建适配器: 实现 RecyclerView.Adapter,定义数据和视图的绑定逻辑。...创建自定义控件的基本步骤 继承已有控件: 创建一个类,继承自 View 或 ViewGroup。 重写绘制方法: 在 onDraw 方法中定义控件的绘制逻辑。
无须修改原有布局的 XML 文件,视图绑定将根据您现有的布局自动完成所有工作。 视图绑定将会根据现有的 XML 文件,为 Module 内所有的布局文件生成绑定对象。...它会为 Module 下的每一个布局的 XML 文件生成一个对应的绑定对象,并根据源文件为其命名,比如 activity_awesome.xml 对应的绑定对象为 ActivityAwesomeBinding.java...生成代码的逻辑被优化为,当您在 Android Studio 中编辑 XML 布局文件时,只会更新所修改布局对应的绑定对象。同时这些工作会在内存中运行,从而使这个过程可以迅速完成。...既然编译器可以通过 XML 布局文件知道每个属性的类型和为空的可能性,那他就可以安全的调用 findViewById。...在使用引入布局的时候,视图绑定会创建一个被引入布局绑定对象的引用。注意 include>标签有一个 id: android:id="@+id/includes"。
前言 之前用简书的时候一直是在web端,后来下载了客户端,看到了搜索的那个动画,就尝试的去写了,没写之前感觉挺容易的,写了之后,就感觉里面还是有些要注意的东西的。话不多说,直接上图。...> 这里的TextView要添加maxLines=1属性,如果不添加,当text=“搜索简书内容和朋友”时会有2行变1行的效果,看起来效果不太好。...activity xml.png 头部视图: xml version="1.0" encoding="utf-8"?...android:layout_width="match_parent" android:layout_height="match_parent"> TextView...(); //当position=0时,对标题栏执行透明度变化 if (position == 0) {
领取专属 10元无门槛券
手把手带您无忧上云