自定义view

如果时光倒流,你还会选择做 Android 开发吗?

浪尽此生 提交于 2020-01-14 05:17:16
好像确实如此 刚学Android Jetpack时,前辈们都不怎么推荐使用DataBinding。从中了解到DataBinding是这样的: 消除findViewById (我选择kt) 在xml中写(逻辑)代码 (黑人问号面???,反感) 无需手动设置一些监听 (不就几个监听吗) soDataBinding在我眼里作用不大,甚至有点反感(主要xml那块),很长一段时间都排斥DataBinding,项目中只使用ViewModel和LiveData等其他Jetpack组件。 渐渐入坑 借助kt的插件,我们在任何地方都不需要写findViewById(感谢大佬指出)。但由于以前不太懂在RecyclerView.ViewHolder中使用kt插件,还是老老实实的findViewById。这也让我想起DataBinding的好处:消除findViewById。而且对一个组件学都没学,在不了解的情况下,就判处"死刑",好像也不妥。 于是我决定尝试学习一下DataBinding,但秉着不在xml中写逻辑代码的原则,在学习DataBinding时,有关运算符的介绍都是跳过不看的。例如这些: 减少胶水代码 原本使用kotlin搬砖的我,减少胶水代码才是databinding为我带来最直接的便利。比起修改LiveData的值,然后设置Observer感知LiveData的变化

Android进阶笔记11:ListView篇之ListView性能优化

China☆狼群 提交于 2020-01-14 04:19:57
1. 首先思考一个问题 ListView如何才能提高效率 ?   当convertView为空时候,用setTag()方法为每个View绑定一个存放控件的ViewHolder对象。当convertView不为空,重复利用已经创建的View的时候,使用getTag()方法获取绑定的ViewHolder对象,这样就避免了findViewById对控件的层层查询,而是快速定位到控件。 鉴于上面分析,可以通过如下方法对ListView进行性能优化: (1)复用 convertView,使用历史的View, 提高效率 200 % (2)自定义静态类ViewHolder,减少findViewById的次数, 提高效率 50 % (3) 异步加载数据 , 分页加载数据 (4) 使用WeakRefrence 引用ImageView对象(采用 WeakRefrence (弱引用) ,防止在不断刷新当前界面View时候产生内存泄露 ) 2. ListView的性能优化 之 使用convertView和 ViewHolder : (1) 自定义ListView的Adapter时候,里面有个实现方法为getView(),这个方法专门用来加载View的, 优化getView()方法 , 内容如下: 1 static class ViewHolder { 2 TextView text; 3

Android学习之SQLite的基本使用

雨燕双飞 提交于 2020-01-13 20:10:19
本文主要是针对于初学者使用。 AndroidStudio使用版本: Android Studio 3.5 Build #AI-191.8026.42.35.5791312, built on August 9, 2019 JRE: 1.8.0_202-release-1483-b03 amd64 JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o Windows 7 6.1 Android手机测试版本:Android6.0,华为荣耀6 本博文的实现功能:通过输入Activity,保存输入数据进入SQLite数据库,然后通过宁一个Activity显示出SQLite中的数据信息。 (一)、 在手机上进行数据库的开发,基本步骤主要是以下几步,数据库名: record.db,数据表名:personinfo_record : 1、创建数据库: 创建数据库需要继承SQLiteOpenHelper这个抽象类。 本文中使用的方法是普遍使用方法,可以借鉴。如下: public class DBHelperSub extends SQLiteOpenHelper implements Serializable { private String dbName; private Context context; private SQLiteDatabase

Making Your ActionBar Not Boring

无人久伴 提交于 2020-01-12 09:30:02
这篇文章转自国外一个技术大牛的 博客 ,首先感谢这位大牛的无私奉献。 Android应用中有一名位 Google书报摊的应用,他实现了一种新的ActionBar风格。 当用户初始进入该界面的时候,为一个透明的 ActiionBar ,这样利用充分的空间显示大图片,如果用户滚动页面需要查看内容的时候,则大图收缩到 ActionBar 中。 这个的主要优势是使ActionBar和内容完美的结合在一起, 整个操作看起来浑然天成,给人一种新奇的感觉。 这篇文章将会讲解ActionBar效果和 Ken Burns 动画效果的实现。 The ActionBar trick Styles: 第一步先制作合适的Style,这里 需要使用ActionBar的 overlay模式 并设置透明的ActionBar背景。 [html] view plain copy print ? < resources > < style name = "TransparentTheme" parent = "@android:style/Theme.Holo.Light" > < item name = "android:windowBackground" > @null </ item > < item name = "android:actionBarStyle" > @style/ActionBarStyle

android之对不同的页面管理

本小妞迷上赌 提交于 2020-01-11 08:25:18
一、界面状态有哪些 在Android中,不管是activity或者fragment,在加载视图的时候都有可能会出现多种不同的状态页面View。比较多的有下面几种: 1、内容界面,也就是正常有数据页面 2、加载数据中,加载loading 3、加载数据错误,请求数据异常 4、加载后没有数据,请求数据为空 5、没有网络,网络异常 场景: a、加载网络数据时,需要用户等待的场景,显示一个加载的Loading动画可以让用户知道App正在加载数据,而不是程序卡死,给用这样可以给户较好的使用体验。 b、当加载的数据为空时显示一个数据为空的视图、在数据加载失败时显示加载失败对应的UI并支持点击重试会比白屏的用户体验更好一些。 c、加载中、加载失败、空数据等不同状态页面风格,一般来说在App内的所有页面中需要保持一致,也就是需要做到全局统一。 二、采用include方式管理 直接把这些界面include到main界面中,然后动态去切换界面,具体一点的做法如下所示。 在布局中,会存放多个状态的布局。然后在页面中根据逻辑将对应的布局给显示或者隐藏,但存在诸多问题。 存在的问题分析 1、后来发现这样处理不容易复用到其他项目中,代码复用性很低 2、在activity中处理这些状态的显示和隐藏比较乱 3、调用setContentView方法时,是将所有的布局给加载绘制出来。其实没有必要 4

MD-Toolbar

删除回忆录丶 提交于 2020-01-11 05:36:46
Toolbar 先上一张图 谷歌官方对Toolbar的介绍 根据图中的资料,可以知道,Toolbar首先是一个ViewGroup,它是用来做APP的标题栏,其中包括5个部分,分别是一个导航按钮(a navigation button)、一个logo图片(a branded logo image)、一个标题和副标题(a title and subtitle)、一个或多个自定义View(one or more custom views)以及一个action menu( an action menu)。看一张效果图 具体效果图 从效果图中,我们可以很明显地看出来5个部分都是哪里,因为Toolbar是一个ViewGroup,你只有都设置出来了才会显示,如果不设置的话,那么都是空的,啥也没有。那么究竟应该怎么设置呢?下面我们就开始使用Toolbar。 Toolbar的正确使用姿势 第一步 导入v7包 implementation 'com.android.support:appcompat-v7:27.0.2 第二步 继承AppCompatActivity public class MainActivity extends AppCompatActivity 第三步 设置主题theme <application android:allowBackup="true" android:icon=

小程序自定义showModal弹框

旧街凉风 提交于 2020-01-10 15:28:40
纯属练习组件化 组件wxml页面代码如下 < view class = 'shade' hidden = '{{popup}}' > < / view > < view class = 'shade_box popup {{frameAnimate}}' hidden = '{{popup}}' > < view class = 'content' > { { title } } < / view > < ! -- 内容 -- > < view style = 'min-height:100rpx;' > { { content } } < / view > < view class = 'bottom-btn' > < view bindtap = '_hideEvent' wx : if = '{{ cancelBtn }}' > { { cancelBtn } } < / view > //这一块是因为有时候弹框可能只需要一个按钮, < view bindtap = '_confirmEvent' > { { confirmBtn } } < / view > < / view > < / view > wxss页面代码如下 /* pages/middleAnimation/middleAnimation.wxss */ /* 遮罩 */ . shade { position

一文彻底搞懂Android View的绘制流程

二次信任 提交于 2020-01-10 12:16:37
前言 成为一名优秀的Android开发,需要一份完备的 知识体系 ,在这里,让我们一起成长为自己所想的那样~。 上一篇中我们讲到了 Android的触摸事件传递机制 ,除此之外,关于Android View的绘制流程这一块也是View相关的核心知识点。我们都知道,PhoneWindow是Android系统中最基本的窗口系统,每个Activity会创建一个。同时,PhoneWindow也是Activity和View系统交互的接口。DecorView本质上是一个FrameLayout,是Activity中所有View的祖先。 一、开始:DecorView被加载到Window中 从Activity的startActivity开始,最终调用到ActivityThread的handleLaunchActivity方法来创建Activity,相关核心代码如下: private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent) { .... // 创建Activity,会调用Activity的onCreate方法 // 从而完成DecorView的创建 Activity a = performLaunchActivity(r, customIntent); if (a != null) { r

android (4)控件的xml属性

北城余情 提交于 2020-01-10 11:58:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> android:id 为控件指定相应的ID。 android:text 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串。 android:textSize 指定控件当中字体的大小。 android:background 指定该控件所使用的背景色或背景图,RGB命名法。 android:width 指定控件的宽度。 android:height 指定控件的高度。 android:sigleLine 如果设置为真的话,则控件的内容在同一行中进行显示。 android:scaleType 是控制图片如何resized/moved来匹配ImageView的size。 android:hint 设置EditText为空时输入框内的提示信息。 android:LinearLayout 它确定了LinearLayout的方向,其值可以为vertical, 表示垂直布局horizontal, 表示水平布局。 android:gravity 指定View组件的对齐方式,比如说居中、居右等,这里指的是控件中的文本位置并不是控件本身。 android:layout_gravity(区别于:android:gravity ) 指定Container组件的对齐方式.比如一个button

一文彻底搞懂Android View的绘制流程

让人想犯罪 __ 提交于 2020-01-10 11:36:35
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 成为一名优秀的Android开发,需要一份完备的 知识体系 ,在这里,让我们一起成长为自己所想的那样~。 上一篇中我们讲到了 Android的触摸事件传递机制 ,除此之外,关于Android View的绘制流程这一块也是View相关的核心知识点。我们都知道,PhoneWindow是Android系统中最基本的窗口系统,每个Activity会创建一个。同时,PhoneWindow也是Activity和View系统交互的接口。DecorView本质上是一个FrameLayout,是Activity中所有View的祖先。 一、开始:DecorView被加载到Window中 从Activity的startActivity开始,最终调用到ActivityThread的handleLaunchActivity方法来创建Activity,相关核心代码如下: private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent) { .... // 创建Activity,会调用Activity的onCreate方法 // 从而完成DecorView的创建 Activity a = performLaunchActivity(r,