- 博客(54)
- 资源 (5)
- 收藏
- 关注
原创 TextVIew折叠展示
TextView折叠展示一段文字效果图展开前展开后public class TextViewLinesUtils { /** * 设置textView结尾...后面显示的文字和颜色 * @param context 上下文 * @param textView textview * @param minLines 最少的行数 * @param originText 原文本 * @param endText 结尾文字 *
2020-11-12 17:18:51
2062
3
原创 Retrofit上传图片
Retrofit上传图片就两个思路1.ApiService @Multipart @POST fun uploadImage(@Url url: String, @Part file: MultipartBody.Part?): Call<ResponseBody>2.生成MultipartBody.Part val file = File(picture) // picture是图片路径,通过路径生成file文件 val requestBo
2020-11-11 17:34:41
632
原创 Android Toolbar和状态栏的重叠解决
在项目中可能会使用到沉浸式的状态栏有一个库StatusBarCompat比较好用,导入依赖需要注意的地方就是,在使用这个库的时候,可能会遇到toolbbar和状态栏发生重叠的现象。解决方法有两个1.找到你布局中的toolbar,加上两个属性,图中红色部分2.用代码重写设置你的toolbar的高度,找到toolbar控件,作为参数传入下面的方法 public void setStatusBarHeight(View view) { ViewGroup.LayoutPar
2020-10-27 10:18:10
1616
原创 Recyclerview的一个容易被忽略的方法getAdapterPosition
问题在Recyclerview实现的列表实现点击事件,点击的时候,根据不同的位置position来操作。 content2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LogUtils.d("ShopCartItemType onItem
2020-10-14 17:24:04
1317
原创 Android 启动页全面屏的适配
启动页全面屏的适配为了能够避免一个短暂的黑屏或白屏现象,我们都会在闪屏页面(或者启动页面)的theme上加上一张背景图。但是如果不适配,在全面屏的手机上会有拉伸的现象。解决方法1.在清单文件中配置,全面屏的一些参数 <!-- 允许绘制到oppo、vivo刘海屏机型的刘海区域 --> <meta-data android:name="android.max_aspect" android:value="2.
2020-09-29 16:04:10
1137
原创 Android RecycleView + GridLayoutManager 实现一个复杂的布局
效果图要实现这么一个布局有很多种方式,这里介绍一个Recyclerview+GridLayoutManager多布局的方法来实现。思路1.首先要明白整体的一个布局结构,从上到下分别为:轮播图的头布局,热门主题,推荐模板,广告图,图片主题,最近热门。所以我们可以设置几个type对应不同的布局。 public static final int ITEM_HEADER = 1; // 头布局 public static final int ITEM_HOT_SUBJECT = 2; //
2020-09-25 15:49:52
3540
2
原创 Android代码重构:Redundant local variable冗余的局部变量
Redundant local variable冗余的局部变量1.点击Analyze,选择Run Inspection by Name,输入Redundant local variable,出现以下结果2.找到冗余的局部变量,进行修改就可以了,比如下面的return一个对象,如果不复杂,就直接return,不用写一个局部变量接收,然后再返回。修改前:修改后:...
2020-09-23 14:00:55
1561
原创 Android代码重构------Overly long method过长的函数方法
快速迭代开发的过程中,往往就写的很随意。版本迭代的越多,代码的问题就越多。当有时间的时候,需要去审阅自己写的代码,看看哪里是需要重构的。重构代码之一:解决过长的函数方法Overly long method我们都会在函数方法里面去实现我们的逻辑,容易出现的问题是,一个函数方法我们可能会写很多行。使用studio里面的Analyze来检测哪些函数方法过长。有两个地方可以调用Analyze1.studio最上方的工具栏2.在当前得代码点击右键3.点击Analyze,选择Run InSecptio
2020-09-22 14:44:24
268
原创 Flutter引用图片
Flutter引用图片在Android开发中,我们引用图片要门是R.drawable.xxx或者R,mipmap.xxx只需要将图片放在drawable文件夹或者mipmap文件夹下就可以了。Flutter开发Android应用的时候,引用图片有些许不同。1.首先在工程目录下创建一个文件存放你的图片2.在pubspec.yaml文件中设置应用注意:箭头所指的行数需要左对齐,不对齐就会报错。如下图所示3.最后是引用图片最后总结:flutter这样引用的本地图片,有几个疑问1.一般一
2020-09-15 15:20:19
1127
原创 Not allowed to start service Intent { act=com.mycp.initservice cmp=
初始化的Service异常处理在Application中,我们经常会做一些初始化的操作,而且会把这些初始化的操作放到一个service里面去做。问题就出在Android 8.0 不再允许后台service直接通过startService方式去启动,否则就会引起IllegalStateException。解决方法1.在你的Service里面,做启动方式判断,然后再onCreat方法里做兼容 Intent intent = new Intent(context, InitService.cla
2020-09-10 16:38:18
2189
1
原创 Flutter运行报错Could not download flutter_embedding_debug.jar (io.flutter:flutter_embedding_debug:1.0.0-
运行flutter报这个错,是因为资源包无法下载下来,在build文件下配置一下maven就ok了buildscript { ext.kotlin_version = '1.3.50' repositories {// google()// jcenter() maven{ url "https://maven.aliyun.com/repository/google" } maven{ url "https://mave
2020-09-04 18:30:04
1838
原创 if else的优化
对于同一级的大量的if else逻辑的优化有些业务,需要根据不同的type,执行不同的逻辑。第一反应会写成下面的大量的if else,同一级的if else。也就是每一个分支判断里面不会再有if else的判断了。 if (pageType.equals(Constant.PAGE_TYPE_SALE) && !pageValue.isEmpty()) { // 跳转到售后订单 int id = Integer.parseIn
2020-09-02 16:05:01
173
原创 Gson解析泛型T的数据
Gson解析泛型T的数据Gson解析泛型的数据有两种情况,一个是解析泛型对象,一个是解析泛型的List。1.解析泛型对象先要自定义一个类实现ParameterizedType这个接口中的方法public class GsonTypeTokenObjectUtils implements ParameterizedType { private final Class raw; private final Type[] args; public GsonTypeTokenO
2020-08-31 17:17:14
3238
原创 JSON解析,解析key是数字的情况
JSON解析key是数字的情况在返回的json数据里面,可能会包含有那种key是数字的情况,如下所示{ "code":0, "data":{ "id":"200", "company_id":"10018", "room_id":"6", "anchor_id":"5", "view_count":0, "people_buy":0, "title":"参加参考参考看", "status":2, "content_intro
2020-08-28 16:33:21
2772
原创 Android webview嵌套一个h5的聊天页面,解决获取键盘的时候,布局整体上移
需求:一个Webview嵌套h5的聊天页面,当弹出键盘的时候,整体布局上移。如果不做处理,弹出的键盘会遮挡输入框,让人看不见输了什么内容。解决1:用AndroidBug5497Workaroundpublic class AndroidBug5497Workaround { private final Activity activity; // For more information, see https://code.google.com/p/android/issues/de
2020-07-20 15:55:10
1227
1
原创 java.lang.IllegalArgumentException: declares multiple JSON fields named status
解析遇到的问题子类有一个字段叫status,父类也有一个字段叫statuspublic class BaseModel<T> { public String time; public String message; public int code; public int status; // 如果子model中有相同的status字段,需要加上transient,不然会报错,说你有两个重复的字段 public T data;}public
2020-07-16 18:18:14
1125
原创 leetcode学习第3题:计算股市最大利润
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。输入: [7,6,4,3,1]输出:
2020-07-16 14:04:18
757
原创 leetcode学习第2题:找出两个数组中相同的元素(即两个数组中的交集)
两个数组中相同元素(交集)例如/**两个数组相同的元素,最优解输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]*/方法利用HashSet的特性 HashSet<Integer> set1 = new HashSet<>(); HashSet<Integer> set2= new HashSet<>(); ArrayList<Integer>
2020-07-15 18:03:26
1400
原创 leetcode学习第一题
找出数组中的重复数字在一个长度为n的数组nums里的所有数字都在0~n-1的范围内,数组中某些数字是重复的,但不知道有几个重复的数字,也不知道重复了几次,请找出任意一个重复的数字。方法1循环嵌套遍历class Solution { public int findRepeatNumber(int[] nums) { for(int i = 0; i < nums.length;i++){ for(int j = i+1; j < nums.l
2020-07-15 14:16:42
159
原创 Android webview上传图片
Webview加载h5页面,h5上传图片需求是点击h5页面中的按钮,可以调起原生的图片库或者相机,然后上传图片。ios天然适配不用做任何操作,Android必须自己写逻辑去适配h5。Android webview适配h51.重写WebchromeClient里面的两个方法 webView_common.setWebChromeClient(new WebChromeClient(){ // 低版本的Android执行这个方法(Android < 5.0)
2020-07-06 14:42:00
1173
原创 Android跑马灯遇到的问题(有些手机有效果,有些手机没效果)
跑马灯的记录Android跑马灯的实现很简单,有android系统提供的api就可以实现。问题在于在实际的手机上运行的时候,有一些手机可以有效果,有一些手机没效果。所以这个问题可能每个人遇到的情况不一样,我这里说说我遇到的情况的解决办法,不一定对你有用,但是我用了之后,是解决了。解决方法1.xml布局文件 <com.flj.latte.ec.widget.MarqueTextView android:id="@+id/item_
2020-06-22 14:07:27
691
原创 ConstraintLayout布局里的一个属性app:layout_constraintDimensionRatio
ConstraintLayout这是一个约束布局,可以尽可能的减少布局的嵌套。有一个属性特别好用,可以用来动态限制宽或者高app:layout_constraintDimensionRatio关于app:layout_constraintDimensionRatio参数app:layout_constraintDimensionRatio=“h,1:1”表示高度height是动态变化的,然后比例是 width / heightapp:layout_constraintDimensionRatio=
2020-06-18 16:09:13
4270
原创 Android 友盟消息推送集成遇到的问题
友盟消息推送遇到的问题集成友盟消息推送,步骤根据提供的技术文档接入便可。可是当你集成到项目中去的时候,可能并不是一帆风顺就搞定,因为你项目里面是可能集成了其他的sdk(比如支付宝,微信,七鱼等等三方的sdk)。那么这个时候,再加上友盟的消息推送sdk集成可能就会出现问题。问题清单友盟消息推送sdk和支付宝sdk冲突问题后台配置了消息推送,也显示发送成功,但是手机没有收到消息通知解决方法1.解决与支付宝sdk冲突的问题注释掉common和uttid两项依赖,只依赖push用支
2020-06-01 14:23:06
747
原创 Android activity跳转的时候,会有页面的残影
Android Activity跳转,会有页面的残留阴影在项目中的一个简单的Activity跳转出现了一个问题, A跳转到B会有A的残留阴影页面 。一般来说Activity的跳转非常简单: A跳转到B,然后finish掉A1.startActivity(new Intent(xxx.context,xxxx.class));2.finish();解决办法1.A跳转到B再快速跳转到C;可能中间会出现B的残影如果在B的OnResume中进行页面跳转,onResume是展示界面时走的生命流程,如果on
2020-05-11 11:31:18
3136
原创 Android模拟器的检测
Android模拟器的检测需求:最近有一个需求,要检测出模拟器,防止恶意刷流量刷注册。1.基于特征属性来检测模拟器,比如IMSI,IDS,特殊文件等等。这个方案局限性太大,貌似现在大部分模拟器默认就是修改了的,还不需要人为的去修改。 经过测试,发现如下图所示。 如果是模拟器的话,这些特殊值应该返回true,比如DeviceIDS,Build。可是居然返回了false,说明特殊值的检测已经没有任何
2017-05-26 15:43:02
5885
1
原创 Android SnackBar
SnackBar是一个新控件,它的作用是类似Toast的。如果需要一个弹出消息提示,可以考虑用SnackBar替换Toast。1.SnackBar有一些交互动画,那么父布局最好是android.support.design.widget.CoordinatorLayout<?xml version="1.0" encoding="utf-8"?><android.support.design.wi
2017-04-07 17:39:41
368
原创 Android ToolBar+DrawerLayout的实现
实现思路: 1.关联相应的依赖包 compile ‘com.android.support:appcompat-v7:25.3.1’2.主布局<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
2017-04-06 17:19:05
326
原创 Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.B
一个bug日志 FATAL EXCEPTION: main03-25 14:24:07.724: E/AndroidRuntime(4135): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.syyx.jingubang.ky/com.anguotech.android.activity.InitAnd
2015-03-27 10:19:56
2295
原创 ViewPager+fragment实现切换页面(一)
如今的很多应用中都是下面有一排按钮,点击可以切换页面,滑动也可以切换页面。下面就来简单的实现这个功能。
2015-03-12 15:11:19
896
原创 ExpandableListView的基本用法
QQ上的好友列表在Android怎么实现,有一个最简单的方法,那就是ExpandableListView,下面简单介绍一下ExpandableListview的用法。 先看看效果图,没有找到大小合适的图片,所以凑合着看吧。 一、准备工作(界面,和需要的数据) xml version="1.0" encoding= "utf-8"?
2015-03-10 10:41:02
574
原创 com.google.gson.JsonSyntaxException:java.lang.IllegalStateException异常
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException异常处理
2015-01-31 16:12:45
9964
原创 Imageview在百度地图中实现点击事件
1.首先第一步,需要声明的全局有关类的引用private BMapManager mBMapMan;private MapView mMapView;private MapController mMapController;private RadioGroup radiogroup;private RadioButton normalview;private RadioBu
2014-05-10 10:58:34
1242
原创 java函数的基本使用
一.函数的基本使用函数是定义在类中的具有特定功能的一段独立小程序。函数也称为方法。函数定义的格式:修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,......){执行语句;return 返回值;}说明:返回值类型:函数运行后的结果的数据类型参数类型:形式参数的数据类型形式参数:一个变量,用来存储调用函数时传递给函数的实际参数。
2014-05-07 13:32:39
580
原创 java基本程序流程控制
选择结构:if else语句(实现双分支选择结构)1.if else语句是一个完整的单语句,即从if开始到else不管中间有多少内容。2.if else语句基本结构(if语句中只有一条执行语句时,省略花括号) if(判断表达式) 执行语句; else执行语句;3.if else复合语句结构 if(判断表达式) { 执行语句1
2014-05-06 22:19:24
568
转载 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo解决办法
不能实例化activity有如下三种情况:1.没有在Manifest.xml 清单中注册该activity,或者在创建完activity后,修改了包名或者activity的类名,而配置清单中没有修改,造成不能实例化。2.自己新建了一个包,而注册时候依然用的默认包,例如,默认包是com.ghg.Dao包,你新建了一个com.ghg.DaoImpl包,并在此包中写了个FirstActi
2014-05-05 15:37:09
698
原创 java基本语法
一、Java语言严格区分大小写 书写规范如下: 包名:多单词组成时全小写。(com.xh.case) 类名和接口名:每个首字母单词均大写。(MyTest) 变量名和函数名:一个单词均小写,多个单词是第一个单词首字母小写,后面的所有单词首字母大写。(MyFunction) 常量名:均以大写字母表示,多个单词用下划线分开。(My_TAG) 二、
2014-04-30 09:10:48
732
原创 Java初步认识
一.Java的基本常识Java语言是美国Sun Mircosystems公司开发的一种面向对象的程序设计语言。Java语言特点:简单,高效,健壮,安全,与平台无关,可 可移植性好,多线程等等。简单:摈弃了c++很少使用的、难以理解的、容易混淆、复杂的内容。Java只支持单继承,支持多接口。取消了指针功能,增添了内存自动回收功能。 可移植性:1.数据类型在不同操作系统中占有同
2014-04-27 20:34:04
606
原创 Android之GridView初步认识
GridView是一项显示二维的viewgroup,可滚动的网格。一般用来显示多张图片。GridView的常用属性: android:stretchMode="columnWidth" //缩放与列宽大小同步 android:columnWidth="100dp" //列的宽度 android:numColumns="3"//设置列数 android:h
2014-04-26 20:15:35
755
原创 Android之TimePicker和TimePickerDialog
TimePikcer的实现:通过OnTimeChangedListener()方法中的OnTimeChanged方法实现。实例代码如下:public class MainActivity extends Activity {private TimePicker tp; @Overrideprotected void onCreate(Bundle savedInstan
2014-04-25 13:41:19
1455
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人