
android基础
lidongxiu0714
https://github.com/hpuzzuldx/
展开
-
windows下databinding xml文件中有中文无法编译问题(databinding.annotationprocessor.ProcessExpression)
Mac上编译没有问题,windows上一直报databinding.annotationprocessor.ProcessExpression错误。解决办法1:所有的@{}中的中文换成@{@string/str},利用引用string中文本的方式解决,但对于老项目则比较麻烦。解决办法2:其实是java的编码问题,只需要在环境变量中添加JAVA_TOOL_OPTIONS 为-Dfile.encoding=UTF-8,就可以解决。...原创 2020-07-29 11:58:06 · 781 阅读 · 0 评论 -
gradle中简单配置一个项目对应不同系列设备生成部分代码不同app文件
build.gradle中添加 ,defaultConfig 中设置 flavorDimensions “default” productFlavors { "C80X" { // applicationIdSuffix ".d" 也可以设置不同applicationId buildConfigField "String", "...原创 2019-12-03 17:21:08 · 515 阅读 · 0 评论 -
TextView 富文本学习六 - 设置了ClickableSpan导致内存泄漏
1 设置ClickableSpan导致内存泄漏 spannable.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { ...原创 2019-06-13 11:33:08 · 5461 阅读 · 7 评论 -
EditText设置只能输入某些字符TransformationMethod,自动把输入小写字母转成大写
1 TextView的 android:textAllCaps=“true”TextView上可以设置 android:textAllCaps="true"就可以把text中的小写字母展示成大写字母,如果想让EditText也可以把输入的小写字母转换成大写字母呢。注意:如果在EditText中添加android:textAllCaps=“true”,当在EditText中输入时会导致崩溃:...原创 2019-03-14 15:11:47 · 5077 阅读 · 0 评论 -
TextView富文本学习二(获取html代码片段中的超链接地址,设置点击事件,并设置连接样式)
1 利用SpannableStringBuilder获取存在的Span/*** Return an array of the spans of the specified type that overlap* the specified range of the buffer. The kind may be Object.class to get* a list of all the...原创 2019-03-04 15:02:59 · 2973 阅读 · 0 评论 -
RecyclerView 滑动时不加载图片,空闲时恢复图片加载
mRecycleView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { if...原创 2019-03-14 10:09:19 · 6551 阅读 · 2 评论 -
Android富文本的学习一
1TextView的富文本介绍:什么是富文本,大家都知道TextView可以显示文字,设置文字样式,利用富文本可以给TextView添加更多的样式,更加的类似h5网页,例如在一个TextView通常显示的文本样式是统一的,如果想对显示的同一段文本不同部分的文字设置不同的样式,颜色,大小等就需要用到富文本,富文本还可以利用TextView显示图片,设置点击事件等。TextView想要实现富文本...原创 2019-03-03 16:43:07 · 3077 阅读 · 0 评论 -
简单的底部弹出窗,BottomSheetDialog
1 BottomSheetDialog 底部弹出框BottomSheetDialog的简单使用: /** * func:弹出举报dialog */ private void showShieldDialog(long articleId,int articleType) { if (getActivity() == null) return;...原创 2019-03-08 15:46:38 · 3031 阅读 · 0 评论 -
一次软键盘引起的界面跳动
软键盘导致界面被顶起在RelativeLayout布局中放置在顶部的View由于受到软键盘弹起的影响,会被顶到软键盘以上,体验非常不好,这时可以给Activity设置 android:windowSoftInputMode=“adjustPan|stateHidden”,就可以防止底部View被顶起。上面的问题应该是比较普遍的问题,解决方法网上说的也很多。但更多的时候我们遇到的是软键盘遮挡的问题...原创 2019-03-08 15:21:32 · 1969 阅读 · 0 评论 -
Android中的像素密度,屏幕密度,屏幕大小,分辨率,ldpi,mdpi,xhdpi,xxhdpi
Android开发为适配不同屏幕需要在资源文件中添加多套图片或者多套布局文件,这篇文章讲解多套图片。ldpi,mdpi,xhdpi,xxhdpi,xxxhdpi分别代表什么?如何使用。1屏幕大小智能手机普及,屏幕也随之越来越大,从经典的iPhone 4的3.5英寸到iphone XR 6英寸多,Android手机也逐渐进入了6.x英寸行列。屏幕大小定义:手机对角线的物理尺寸,以英寸(in...原创 2019-01-24 11:59:06 · 17862 阅读 · 0 评论 -
Handler延迟消息执行机制,会阻塞吗?
Handler调用过程简单说明Handler在Android中使用频繁,主要用来进行进程间通信,子线程通过Handler可以操作UI。有send和post两种方法,send方法是在工作线程中处理完耗时操作后调用handler的sendMessage(message)把message对象发送给主线程,在主线程中重写handlerMessage()方法,判断接收到的消息进行更新UI的操作;而post...原创 2018-12-19 11:10:52 · 10019 阅读 · 4 评论 -
RecycleView 中使用glide加载图片如何防止加载错乱
Glide内部已经使用了setTag的方式, 如果再使用ImageView的setTag会报错,所以使用setTag(xxx,xxx)函数。 try { String uri = item.getBackgroundUrl(); holder.mBackground.setTag(R.id.imageid,uri)...原创 2018-12-24 19:46:56 · 5609 阅读 · 0 评论 -
Android Serializable和Parcelable原理和使用选择
1 android 中的对象序列化序列化的目的是保存或传输数据,android中序列化目的具体包括:将对象持久化到本地(保存在文件或者数据库中)方便下次复用。序列化之后,利用数据流在网络中传输。组件间传递数据。2 序列化手段java中最常用的序列化标识是Serializable,定义一个Bean时实现Serializable接口,不需要实现什么方法,Serializable从源码看...原创 2018-12-18 14:19:10 · 3182 阅读 · 0 评论 -
Activity启动模式和flag学习,及Activity的换栈能力
1 四种启动模式standard,singleTop,singleTask,singleInstance.解释:statndard :什么启动模式都不设置就是默认模式,启动一个activity如果Task栈不存在则新建一个Task存入activity实例,如果Task栈已经存在则直接把activity实例压入栈中。singleTop:launch mode设置为singleTop,如果要启...原创 2018-12-18 11:05:51 · 2970 阅读 · 0 评论 -
FragmentTransaction commit() 和commitAllowingStateLoss()的区别
两者的作用都是提交Fragment的commit操作,commitAllowingStateLoss允许丢失一些界面的状态和信息;举例:fragment页面可能因某些特殊状况被销毁,然后系统会自发重新创建,此时会读取onSaveInstanceState保存的状态信息。在onSaveInstanceState执行之后再执行commit会发生异常(Can not perform this act...原创 2018-12-17 17:39:01 · 4102 阅读 · 0 评论 -
CountDownTimer 一步实现最简单的倒计时控件
1 CountDownTimerCountDownTimer是Google提供的一个倒计时工具类,利用这个工具可以很方便的实现倒计时功能。Schedule a countdown until a time in the future, with regular notifications on intervals along the way.构造函数:CountDownTimer(lon...原创 2019-03-07 19:59:13 · 4585 阅读 · 1 评论 -
利用CoordinatorLayout+AppBarLayout+TabLayout+ViewPager+RecycleView实现最简单的个人主页
首先看效果图,这几乎是最简单的实现可滑动头部,RecycleView 滑动到顶部时,头部View出来。代码实现XML布局文件:<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="htt...原创 2019-03-08 10:41:28 · 13696 阅读 · 8 评论 -
SwipRefreshLayout 和ViewPager及CoordinatorLayout 解决滑动冲突
SwipRefreshLayout 和ViewPager和CoordinatorLayout 解决滑动冲突1 CoordinatorLayout和SwipRefreshLayout 冲突解决:mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override ...原创 2019-05-08 10:49:42 · 3663 阅读 · 0 评论 -
android 屏幕方向随传感器变化,并带有切换大屏,小屏和锁定屏幕方向
直接上完整代码:import android.content.pm.ActivityInfo;import android.content.res.Configuration;import android.os.Bundle;import android.provider.Settings;import android.support.v7.app.AppCompatActivity;...原创 2019-10-09 19:36:49 · 988 阅读 · 0 评论 -
Android 屏幕方向相关,setRequestedOrientation,OrientationEventListener
1 Activity 在AndroidManifest.xml设置方向android:screenOrientation正向拿着手机(平时正常拿手机)对应角度为0度,此时屏幕为为竖屏,旋转180度,对应角度180度,此时屏幕为反向竖屏;90时此时屏幕为横屏(用户右侧(正向)横屏拿着手机),屏幕角度为270,此时屏幕为反向横屏。Android可以利用android:screenOrientat...原创 2019-10-09 19:03:02 · 18048 阅读 · 1 评论 -
Fragment addToBackStack(null)的作用
Fragment常用于一个activity中展示多个相对独立的部分,利用add,show,hide进行fragment的添加,展示和隐藏。 FragmentA fragmentA = FragmentA .newInstance(parameter); getSupportFragmentManager().beginTransaction() ...原创 2019-09-20 10:16:27 · 5338 阅读 · 1 评论 -
Messenger 实现进程间通信IPC
AIDL可以实现进程间通信,但使用稍显复杂,Messenger也可以实现进程间通信,Messenger底层实现利用了 AIDL ,系统已经帮我们完成了Aidl的书写。Messenger可以在不同进程中传递 Message 对象,利用Handler一次只处理一个请求,不存在并发执行的情形。所以这是Messenger的优点,也是它的缺点,它无法用于大量的并发操作,但对于简单的进程间通信则十分好用。利用...原创 2019-09-01 10:23:50 · 287 阅读 · 0 评论 -
implementation,compile,api,Unable to resolve dependency ':app@debugAndroidTest/compileClasspath'
gradle3.+版本后,gradle的依赖方法发生了改变,推荐使用implementation,compile已经不被推荐,api的作用和compile相同。androidTestCompile被 androidTestImplementation替换,testCompile被 testImplementation 替换,本篇主要讲解implementation和api。简单总结上面的意思就...原创 2019-08-12 09:47:16 · 946 阅读 · 1 评论 -
Android 中已提供的注解使用
Android定义了很多有用的注解,可供我们使用,方便编程减少潜在错误的发生。1 @Override @ NonNull @NullableAndroid 中最常见的就是@Override,继承基类,重写函数时不加@Override不会报错,加上@Override编译期会帮我们检查重写是否合法,如果参数,或者类型的不合法会给警告。@NonNull 告诉编译器,参数非空,可以避免函数内部参...原创 2019-08-01 09:37:14 · 1719 阅读 · 0 评论 -
编译时注解学习二之 注解处理器初探AbstractProcessor
1注解处理器介绍使用注解可以方便开发,因为编译期注解处理器会根据注解自动帮使用者完成很多重复性操作。什么叫编译期注解呢,编译期注解是只在编译期有效的注解,注解处理器根据注解会帮我们生成操作所需的工具类,完成相应操作。类似的框架有黄油刀,EventBus3等。注解处理器Annotation Processor会在编译项目时获取相应的注解,APT(Annotation Process Tool),...原创 2019-07-21 11:25:55 · 3865 阅读 · 0 评论 -
package,项目结构包名,applicationId概念学习
本文主要内容来自:https://developer.android.com/studio/build/application-id1 概述利用Android Studio 构建应用时有applicationId的概念,Eclipse构建项目时则只有包名进行区分。Android Studio中既有项目结构包名 ,AndroidManifest.xml中的package属性又有Applicati...原创 2019-07-19 11:21:09 · 4068 阅读 · 0 评论 -
编译时注解学习一之 Element元素
前面的文章学习[java基础之注解](https://blog.youkuaiyun.com/u010126792/article/details/83022093),掌握了注解的基本用法。使用系统或者大神写的框架库提供给我们注解,可以省略好多配置,特别是java Spring开发中注解更是多的眼花缭乱。最近需要用到编译时注解,所以就对AbstractProcessor进行深入的学习,首先对javax.la...原创 2019-07-12 14:10:47 · 4071 阅读 · 0 评论 -
adb常用命令
1 adb开启和关闭(许多时候连接设备一直显示offline,可以试着重启adb服务,获取安装了手机助手它自身会带有一个adb会影响使用)adb start -server // 开启adb服务adb kill -server // 杀死adb服务2 使用adb查看当前连接的设备adb devices // 查看当前连接的设备,如果adb服务还没有开启,这个命令也会自动开...原创 2019-07-02 14:53:13 · 1586 阅读 · 0 评论 -
Activity 设置SingleTask模式,当栈中已有Activity实例时的生命周期
Activiyt的普通启动模式每次利用startActivity都会创建新的Activity实例,有些场景需要栈中只有一个Activity实例,类似app的主页MainActivity,这时就需要用到SingleTask。普通的Activity启动后的生命周期为onCreate-》onstart-》onresume,每次利用Intent启动一个Activity都会创建新的实例,走上面的生命周期。...原创 2019-07-02 14:03:44 · 6858 阅读 · 0 评论 -
EditText 富文本学习七-实现微博热门话题@,#选择好友,整体删除,整体选中功能(思路,简单实例,提取于其他库)
1首先看效果(有点粗糙)整体删除:整体选择:@#符号监听:2 实现代码整体删除功能,要删除一个热门话题需要整体进行删除: mEditText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, ...原创 2019-06-21 16:50:05 · 2797 阅读 · 0 评论 -
onSaveInstanceState()和onRestoreInstanceState() 执行时机和Activity生命周期函数执行顺序
1 onSaveInstanceState()和onRestoreInstanceState()Activity会在某些特殊情况下被销毁(内存不足,或者不是在主页面调用 Process.killProcess,system.exit()等),然后系统会重新调起Activity。onSaveInstanceState(Bundle outState)和onRestoreInstanceState(...原创 2018-12-17 17:33:25 · 8720 阅读 · 0 评论 -
透明主题activity和dialog对其他activity生命周期的影响
1 activity的生命周期简单说明首先上官网图片://activity不同状态有不同的回调:public class ExampleActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst...原创 2018-12-14 16:56:47 · 8859 阅读 · 1 评论 -
兼容ProgressBar圆形设置颜色
21以上的api 可以直接设置颜色 通过coloraccount 或者是android:indeterminateTint="@color/colorPrimary"在低版本是不行的 所我判断了版本通过加载成一个drawable 来设置/**设置ProgressBar 的颜色@param colorId color 在色值中的颜色@param mProgressB...原创 2018-12-04 15:48:45 · 2313 阅读 · 0 评论 -
AndroidManifest.xml文件何时被加载?如何查看apk的AndroidManifest
1 何时被加载首先分析一波,四大组件需要在AndroidManifest文件中配置否则无法使用,类似Activity无法启动,Activity可以被其他应用利用全类名或者action启动,就算此时要启动activity的应用没有被启动呢,所以AndroidManifest在系统启动时或者应用安装完毕后已经被系统加载。从系统代码级别解释就是系统启动过程中PMS会扫描特定目录下的apk...原创 2018-09-26 16:07:10 · 5829 阅读 · 0 评论 -
Messenger和aidl的关系&aidl支持多线程吗,messenger呢
1 Messenger封装了Aidl,使用时不用再写aidl,其实是源码中已经写好了aidl:IMessenger.aidl.package android.os; import android.os.Message; /** @hide */ oneway interface IMessenger { void send(in Message msg); ...原创 2018-09-26 15:33:34 · 3555 阅读 · 0 评论 -
android软键盘弹起面试题
软键盘弹起后遮挡布局有什么解决方案?1设置windowSoftInputMode 软键盘弹起时布局自动变化或许可以解决2监听根布局变化,获取软键盘高度,然后滚动或移动界面windowSoftInputMode中adjustResize和adjustPan什么区别?adjustResize会改变activity的高度,adjustPan会移动布局一个登陆界面,输入框和按钮,键盘弹...原创 2018-09-26 10:04:29 · 2985 阅读 · 0 评论 -
android 一道关于dp,sp,px 的面试题
题目:android 开发中常用的尺寸单位是什么:dp sp pxdp 和px的区别,两个不同大小的屏幕dp和px的表现有什么区别dp与设备密度无关,dp不同尺寸屏幕显示效果不同,但是控件尺寸大小相同,所以最终结论是dp是具体的物理尺寸,与设备密度无关。px屏幕上的点,与密度相关,密度大了,单位面积上的px会比较多,px就显得比较小。设置160px在小屏幕上占据大...原创 2018-09-25 14:21:41 · 3090 阅读 · 0 评论 -
android&ios webView加载MarkDown 或者html代码片段
很多app详情页的新闻主体是html或者markdown片段,这里介绍一种简单的加载方式:利用marked.js(https://github.com/chjj/marked)和webView就可以实现片段加载。//bodyHtml 就是要加载的md或者html片段。private String getHtmlData(String bodyHTML) { Strin...原创 2018-09-06 14:24:25 · 4047 阅读 · 0 评论 -
Retrofit Get请求中带有特殊字符(^)报400错误
转眼又是一个月,回首已经过两年,唉。修改了密码之后登陆app,发现无法登陆直接报错,赶紧查看代码log:09-05 12:50:29.909 13653-13653/com.yiche.autoreport W/System.err: retrofit2.adapter.rxjava.HttpException: HTTP 400 at retrofit2.adapter...原创 2018-09-05 13:22:16 · 5520 阅读 · 0 评论 -
Android本地广播和全局广播的区别及实现原理
迷茫时该如何选择?1.本地广播和全局广播1.1本地广播: 广播事件的发送和接收都在本应用,不影响其他应用也不受其他应用影响,只能被动态注册,不能静态注册,主要用法都在LocalBroadcastManager类中。1.2全局广播: 可以接收其他应用发的广播,也可以发送广播让其他应用接收,全局广播既可以动态注册,也可以静态注册,接受其他应用和系统广...原创 2018-09-05 10:56:18 · 10655 阅读 · 0 评论