自定义view

Android学习笔记- ButterKnife 8.0注解使用介绍

爷,独闯天下 提交于 2020-03-06 19:08:26
前言: App项目开发大部分时候还是以UI页面为主,这时我们需要调用大量的findViewById以及setOnClickListener等代码,控件的少的时候我们还能接受,控件多起来有时候就会有一种想砸键盘的冲动。所以这个时候我们想着可以借助注解的方式让我们从这种繁重的工作中脱离出来,也让代码变得更加简洁,便于维护,今天主要学习一下只专注View、Resource、Action注解框架ButterKnife。 ButterKnife介绍 ButterKnife是一个专注于Android系统的View、Resource、Action注入框架。 官网:http://jakewharton.github.io/butterknife/ gitHub:https://github.com/JakeWharton/butterknife/ ButterKnife使用前后对比: 看看没有使用View注解之前我们是如何做的 1.)使用之前 public class ExampleActivity extends AppCompatActivity { private final static String TAG = ExampleActivity.class.getSimpleName(); String butterKnifeStr; Drawable

自定义SimpleAdapter

时光毁灭记忆、已成空白 提交于 2020-03-06 18:59:32
SimpleAdapter,跟名字一样,一个简单的适配器,既为简单,就只是被设计来做简单的应用的,比如静态数据的绑定,不过仍然有自定义的空间,比如说在每一个ListItem中加一个按钮并添加响应事件.首先还是先看一下SimpleAdapter的定义吧,直接翻译下SDK doc 吧:   这是一个简单的适配器,可以将静态数据映射到XML文件中定义好的视图。你可以指定由Map组成的List(比如ArrayList)类型的数据。在ArrayList中的每个条目对应List中的一行。Maps包含每一行的数据。你可以指定一个XML布局以指定每一行的视图,根据Map中的数据映射关键字到指定的视图。绑定数据到视图分两个阶段,首先,如果设置了SimpleAdapter.ViewBinder,那么这个设置的ViewBinder的setViewValue(android.view.View, Object, String)将被调用。如果setViewValue的返回值是true,则表示绑定已经完成,将不再调用系统默认的绑定实现。如果返回值为false,视图将按以下顺序绑定数据: 如果View实现了Checkable(例如CheckBox),期望绑定值是一个布尔类型。 TextView.期望绑定值是一个字符串类型,通过调用setViewText(TextView, String)绑定。

Fresco-Facebook的图片加载框架的使用

我们两清 提交于 2020-03-06 00:33:24
目前常用的开源图片加载框架有:1.Universal-Image-Loader,该项目存在于Github上面 https://github.com/nostra13/Android-Universal-Image-Loader ; 2.fresco,该项目的中文网站是: http://www.fresco-cn.org/ ,在Github上面是: https://github.com/facebook/fresco 之前一直用的是Universal-Image-Loader,改用fresco之后,在有大图展示的页面,能明显感觉到fresco在渲染速度和图片呈现效果上更胜一筹。fresco与Universal-Image-Loader比起来,最直观的几个优点是: 1.在显示圆形、圆角图片时,不需要另行引入CircleImageView等第三方或者自定义控件; 2.更容易实现图片View的点击效果; 3.默认的渐入显示效果; 下面来说一下fresco的使用: 1.如果使用的是Android Studio,则需要在build.gradle中引入fresco项目: [java] view plain copy dependencies { ...... compile 'com.facebook.fresco:fresco:0.9.0+' ...... 其中0.9.0是fresco的版本;

Android设计模式系列--之适配器模式

大兔子大兔子 提交于 2020-03-05 21:46:43
quote frome: http://www.cnblogs.com/qianxudetianxia/archive/2012/02/27/2010965.html 对于android开发者来说起,适配器模式简直太熟悉不过,有很多应用可以说是天天在直接或者间接的用到适配器模式,比如ListView。 ListView用于显示列表数据,但是作为列表数据集合有很多形式,有Array,有Cursor,我们需要对应的适配器作为桥梁,处理相应的数据(并能形成ListView所需要的视图)。 正是因为定义了这些适配器接口和适配器类,才能使我们的数据简单灵活而又正确的显示到了adapterview的实现类上。 适配器模式,Adapter Pattern,勇敢的去适配,大量的资源可以重用。 1.意图 适配器模式,把一个类的接口变换成客户端所期待的另一种接口,从而使原本不匹配而无法在一起工作的两个,类能够在一起工作。 适配器模式分为类适配器模式和对象适配器模式。 关于类适配器模式,因为java的单继承,如果继承一个类,另外的则只能是接口,需要手动实现相应的方法。 热门词汇: 类的适配器模式 对象的适配器模式 缺省适配器模式 源类 目标接口 2.结构图和代码 为了简明直接,我省略了相关的其他适配器 ,只以此两个适配器为例。 ListViews做为client,他所需要的目标接口(target

Django----中间件详解

旧时模样 提交于 2020-03-04 22:49:53
Django----中间件详解 阅读目录(Content) Django中间件 自定义中间件 中间件(类)中5种方法 中间件应用场景 回到顶部(go to top) Django中间件 在http请求 到达视图函数之前 和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法。 Django1.9版本以后中间件的执行流程 1、执行完所有的request方法 到达视图函数。 2、执行中间件的其他方法 3、经过所有response方法 返回客户端。 注意:如果在其中1个中间件里 request方法里 return了值,就会执行当前中间件的response方法,返回给用户 然后 报错。。不会再执行下一个中间件。 Django 1.9版本之前,如果在request方法中遇到return,会执行最后一个中间件的response方法,然后依次回传 回到顶部(go to top) 自定义中间件 1.在project下随便创建一个py文件 View Code 2、在setings文件中 注册这个 py文件 django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件 View Code 执行结果 为啥报错了呢? 因为 自定义的中间件response方法没有return,交给下一个中间件

接近金三银四?不要慌,先刷完这几百道面试题

懵懂的女人 提交于 2020-03-04 22:09:14
快到金三银四了,很多小伙伴还没有复工,在家呆的有点慌,不知道之后会面临的裁员还是被裁员。在这里我给大家收集了很多面试题,刷完这些面试题,金三银四丝毫不用慌了 AndroidBAT面试专题PDF+学习笔记+相对应的视频教程(见末尾) 一丶Android常问基础面试点 1.四大组件的生命周期和简单用法 1) Activity : onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestory() onCreate() :为 Activity 设置布局,此时界面还不可见; onStart() : Activity 可见但还不能与用户交互,不能获得焦点 onRestart() : 重新启动 Activity 时被回调 onResume() : Activity 可见且可与用户进行交互 onPause() : 当前 Activity 暂停,不可与用户交互,但还可见。在新 Activity 启动前被系统调用保存现有的 Activity 中的持久数据、停止动画等。 onStop() : 当 Activity 被新的 Activity 覆盖不可见时被系统调用 onDestory() : 当 Activity 被系统销毁杀掉或是由于内存不足时调用 2) Service a) onBind 方式绑定的:

【Android UI设计与开发】5.底部菜单栏(二)使用Fragment实现底部菜单栏

那年仲夏 提交于 2020-03-04 12:21:57
既然 Fragment 取代了TabActivity,当然 TabActivity 的能实现的菜单栏,Fragment 当然也能实现。主要其实就是通过菜单栏的点击事件切换 Fragment 的显示和隐藏。 来看看栗子吧: 1.效果图来了: 2.代码具体实现 2.1 自定义底部菜单栏实现方式 (1)对应的 Fragment 编辑代码和布局实现在前面的 Fragment介绍和简单实现 中已经有提及,代码中没复杂的地方,此处略过,具体可看实例代码。 (2)菜单栏实现,这里使用代码实现的,其实也可以用布局文件实现,代码如下: package com.yanis.yc_ui_fragment_menu; import android.content.Context; import android.graphics.Color; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.LinearLayout;

iOS UI控件详解—「UICollectionView综合视图」

烂漫一生 提交于 2020-03-04 11:04:17
Write in the first【写在最前】 UITableView 熟悉吧, UICollectionView 必须熟悉吧。 在 WWDC2012 中的 Introducing Collection Views ,苹果首次介绍了 UICollectionView ,类似 UITableView 的用法使人很容易接受,但强大的自定义布局,又使其相较于 UITableView 有了选择它的更多理由, UITableView 中的表格只支持单排列表,没有办法支持网格列表模式, CollectionView 有着灵活的布局特性,这一点充分说明我们在学会 UITableView 的基础上,再去学习推敲 CollectionView 的必要性。 本篇文章主要从【 UICollectionView 系统文件注解】学习总结。 在「时间 & 知识 」有限内,总结的文章难免有「未全、不足 」的地方,还望各位好友指出,以提高文章质量。 目录: UICollectionView概念 UICollectionView基本组成 UICollectionView层次结构 1.UICollectionView 继承于 UIScrollView 2.UICollectionViewDataSource数据源 3.UICollectionViewDelegate代理 4

Fragment高级

时间秒杀一切 提交于 2020-03-04 07:25:52
Fragment回退栈 代码展示 public class Main2Activity extends AppCompatActivity { private FragmentManager supportFragmentManager; private BlankFragment blankFragment; private Button butBack; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); initViews(); } private void initViews() { supportFragmentManager = getSupportFragmentManager();//获取碎片管理者 FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();//创建事务 blankFragment = new BlankFragment();//创建碎片 butBack = (Button) findViewById(R.id.but

android部分面试题

。_饼干妹妹 提交于 2020-03-04 07:01:12
很不幸,今年是一个非常不平平凡的年,由于种种原因,现在加入找工作的行列中,记录面试中所问到的基础与技术问题。 1、内存泄露如何查看和解决 概念:有些对象只有有限的生命周期,当他们的任务完成之后,它们将被垃圾回收,如果在对象的生命周期本该结束的时候,这个对象还被一系列的引用,着就会导致内存泄露。 解决方法:使用开源框架LeakCanary检测针对性解决 常见的内存泄露有: 单例造成的内存泄露,例如单例中的Context生命周期大于本身Context生命周期 线程使用Hander造成的内存卸扣,当activity已经结束,线程依然在运行更新UI 非静态类使用静态变量导致无法回收释放造成泄露 WebView网页过多造成内存泄露 资源未关闭造成泄露,例如数据库使用完之后关闭连接 2、Service启动方式 1.startService ①.定义一个类继承service ②.在manifest.xml文件中配置该service ③.使用context的startService(intent)启动该service ④.不再使用时,调用stopService(Intent)停止该服务 2.bindService ①.创建bindService服务段,继承自service并在类中,创建一个实现binder接口的实例对象并提供公共方法给客户端调用 ②.从onbind()回调方法返回此binder实例