Android
Dway
大道至简
展开
-
Glide加载webp动画及监听动画播放结束
Glide加载图片非常方便,使用也非常广泛,但是并不能直接支持webp动图。可能很多人会使用Fresco来加载webp,但是对于已经使用Glide的项目,总感觉再使用Fresco有点冗余,如果能用Glide来加载webp那将非常方便。而github上也确实存在webpdecoder这样一个库支持加载webp。具体使用方式总结如下:一、首先加入依赖//Glide库 //implementation 'com.github.bumptech.glide:glide:4.7.1'原创 2021-08-23 21:23:38 · 4059 阅读 · 0 评论 -
EditText光标和文本选中样式自定义
1、先上效果图:<EditText android:textColor="#212121" android:textSize="24sp" android:textCursorDrawable="@drawable/shape_cursor_0080ff" android:textColorHighlight="@color/colorff0080ff" android:.原创 2021-06-18 14:07:34 · 1041 阅读 · 1 评论 -
TextView中drawable和text整体居中
1、效果如下:2、xml代码:<TextView android:id="@+id/duration" android:layout_width="wrap_content" android:layout_height="30dp" android:background="@drawable/shape_4d000000_15_bg" android:paddingStart="12dp" a原创 2021-04-09 21:17:36 · 3493 阅读 · 0 评论 -
Constraintlayout使用问题归纳
Constraintlayout使用问题归纳1、设置比例设置宽高比为1000:440,需要把layout_width和layout_height都设置为0dpandroid:layout_width="0dp"android:layout_height="0dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_to原创 2021-03-22 14:23:35 · 189 阅读 · 0 评论 -
布局中Button总是显示在最顶层问题
从Android SDK 21(即5.0)开始,Button控件按下自带阴影效果,阴影效果相当于是在Z轴的一个分量,所以导致Button总是在最顶层显示。因此解决这个问题最简单办法就是去掉阴影效果,加上以下代码即可:android:stateListAnimator="@null"或者干脆直接用TextView代替Button使用,因为Button实际也是继承TextView。...原创 2020-11-20 08:46:09 · 2038 阅读 · 0 评论 -
TextView设置指定字符串为指定颜色
使用:textView.setText(getColorSpannableString("我是中国人,我爱中国", "中国", Color.parseColor("#FF6A00")));直接调用静态方法,句子中所有“中国”字体都会高亮,以下为静态方法:/** * 设置整个字符串中的指定字符串的为指定颜色 * @param origin 原字符串 * @param colorStr 需要设置高亮的字符串 * @param color 高亮的颜色原创 2020-11-17 14:40:13 · 477 阅读 · 0 评论 -
TextView文字图片混合显示并设置点击事件
例如TextView显示文字,文字最后显示一个小图片,代码如下:TextView textView = findViewById(R.id.text); SpannableString spannableString = new SpannableString("中华人民共和国 "); Drawable drawable = getResources().getDrawable(R.drawable.icon); drawable.setBounds(0原创 2020-08-25 19:40:44 · 741 阅读 · 0 评论 -
EditText禁止自动弹出软键盘
测试有效的做法就是让EditText的父布局获取焦点,就达到效果,所以在父布局添加:android:focusable="true" android:focusableInTouchMode="true"网上还有很多方法,暂时没验证。...原创 2020-03-06 08:42:23 · 402 阅读 · 0 评论 -
ProgressBar使用
布局:<ProgressBar android:id="@+id/dialog_loading_progressbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminateDrawabl...原创 2020-03-04 15:53:30 · 203 阅读 · 0 评论 -
View显示和隐藏动画效果
View显示和隐藏想要有过渡动画效果,可以直接在父布局中添加android:animateLayoutChanges="true"那么view在VISIBLE和GONE时候就会自带动画效果。原创 2020-01-16 16:59:53 · 2554 阅读 · 0 评论 -
Java反射
例如有个类如下:class Person{ private static int count; private String name; public Person(String _name) { name = _name; } }1、获取和设置静态变量的值:try { ...原创 2020-01-06 20:05:13 · 129 阅读 · 0 评论 -
SeekBar进度和缓冲进度使用
主要简单记录SeekBar的使用,例如视频播放进度条,不仅要显示播放进度,还要显示缓冲进度,以下做下简单说明。一、使用SeekBar的布局<SeekBar android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" ...原创 2018-03-14 11:24:25 · 5008 阅读 · 3 评论 -
字符串相关问题以及string.xml中注意的问题
一、如果需要显示一些带变量的字符串,例如 "第1课时 手把手教你写代码 第2小节" ,这样的字符串时,可在string.xml中定义:<string name="section">第%1$d课时 %2$s 第%3$d小节</string>其中每个空格需要用转义代替为&#160;,具体的代码会自动提示可转义的地方。注意多个变量时,需要使用1 2 3区别出来。...原创 2018-03-22 19:52:35 · 230 阅读 · 0 评论 -
TextView文字和背景点击效果
文字按钮一般用TextView来实现,其中文字有按下效果,背景为圆角矩形且也有按下效果。一、使用<TextView android:textColor="@drawable/btn_text_selector" android:background="@drawable/btn_bg_selector"/>二、btn_te...原创 2018-03-24 15:10:22 · 8266 阅读 · 2 评论 -
其他组件通过Binder直接调用Service中方法
其他组件和Service通讯,可以通过广播,也可以通过Binder,如果想直接调用Service中的方法,可以通过Binder。以下以Activity调用Service方法为例:public class MyService extends Service { private DownloadBinder mDownloadBinder; public MyService() {...原创 2017-01-21 09:44:09 · 465 阅读 · 0 评论 -
设置单点触控splitMotionEvents
一、全局单点触控,在主题theme中添加以下内容,整个应用只能单点触控:<item name="android:splitMotionEvents">false</item>二、某个界面需要单点触控的话,直接在布局xml文件中设置:android:splitMotionEvents="false"...原创 2018-03-14 22:01:58 · 1877 阅读 · 0 评论 -
Handler正确用法
使用Handler时,如果直接定义为Activity中,会出现以下警告:The following Handler class should be static or leaks might occur...主要是Handler持有Activity的引用,会有导致内存泄露的风险,所以可通过以下方式可以消除错误提示:private Handler mHandler = new Handler(ne...原创 2018-03-14 20:24:53 · 789 阅读 · 3 评论 -
数字序号转为字母序号
虽然简单,备用起来,方便使用/** * 获取数字序号对应的字母 * @param index * @return */ private static String getLetter(int index){ if(index >=0 && index < LETTER.length){ ...原创 2018-02-26 11:16:21 · 1735 阅读 · 0 评论 -
Android Studio新建module,以及module引用aar等相关问题
该篇文章主要记录module的一些问题,以及jar和aar引用等相关问题,会持续记录更新。一、新建module如果是作为lib被引用,需要选择Android Library。二、作为lib的module如果引用了aar文件:1、把aar文件放到module的libs目录下2、作为lib的module的gradle文件:repositories { flatDir { dir...原创 2018-03-12 20:20:02 · 7451 阅读 · 6 评论 -
Android 6.0 动态权限申请简单简洁优雅的处理方式
Android M 或以上的设备,在使用涉及隐私的安全权限时,需要动态申请,虽然不难,但写下来代码工作量也不少,而且几乎每个应用都需要用到。所以一直在探索一个要足够简单简洁优雅的处理方式,强迫症的精神指导我要拒绝一切繁琐。至于完不完美那就仁者见仁了。一、思路:如果在每个用到权限的地方去申请,有点繁琐,所以做法是直接在每个Activity界面显示前就把该界面所需的权限全部申请允许了,再进入正...原创 2018-01-10 17:12:11 · 33342 阅读 · 38 评论 -
adb常用命令
1、获取管理员权限:adb root2、安装apk:adb install -r apkname.apk,其中-r是reinstall的意思,第一次可以不用-r3、卸载apk:adb uninstall apkname.apk4、打开应用:adb shell am start -n com.dway.test/com.dway.test.MainActivity5、查看CPU架构等...原创 2018-01-08 08:23:13 · 397 阅读 · 0 评论 -
系统一些路径定义
Environment.getDataDirectory().getPath() : /dataEnvironment.getDownloadCacheDirectory().getPath() : /cacheEnvironment.getExternalStorageDirectory().getPath(): /mnt/sdcardEnvironment.getR...原创 2017-01-21 13:50:09 · 519 阅读 · 0 评论 -
Android更好的打印方式Timber使用简单记录
Timber进行打印,好处是使用简单,不用输入tag(tag自动为打印位置类的类名),并且可以一开始就设置是否打印,相当于有个控制打印的总开关。 一、引入依赖:compile 'com.jakewharton.timber:timber:4.5.0' 二、gradle如下设置: android { buildType...原创 2017-11-27 17:18:39 · 9150 阅读 · 0 评论 -
Android应用前后台切换监听,借助ActivityLifecycleCallbacks实现
有时需要监听到应用在前后台切换并做些处理,一般的做法可能是建立一个BaseActivity,然后全部的Activity都继承它,在BaseActivity的onStart和onStop中计数去处理。这样并不是最好的方式,不做详细介绍,有更好的方式,道理其实差不多,就是借助ActivityLifecycleCallbacks来实现。一、写了个帮助类:package com.dway.he原创 2018-01-31 11:49:48 · 4936 阅读 · 9 评论 -
重写ViewGroup并借助ViewDragHelper实现各种拖拽交互效果(二)
本文是《重写ViewGroup并借助ViewDragHelper实现各种拖拽交互效果(一)》http://blog.csdn.net/lin_dianwei/article/details/79166466 的延续,针对(一)中存在的问题继续优化。一、前面SlideUpLayout控件在使用时,如果包含有ListView或RecyclerView等列表的时候,可能存在这样的问题,直接看图:原创 2018-01-30 21:44:54 · 975 阅读 · 1 评论 -
重写ViewGroup并借助ViewDragHelper实现各种拖拽交互效果(一)
一般实现比较复杂的交互效果,都会选择重写ViewGroup,并通过onTouchEvent和onInterceptTouchEvent等实现对各种事件的处理,但对事件的处理是很不容易的一个事情。本文主要是借助v4包中的ViewDragHelper这个帮助类,来重写ViewGroup,把事件完全交给帮助类去完成,并借助帮助类的几个回调方法来完成各种复杂交互效果,完全避开了事件处理。对View原创 2018-01-26 10:12:10 · 2540 阅读 · 4 评论 -
Android Studio中的Module打包成jar和aar的方法
直接找到Module的xxxlib\build\intermediates\bundles\release\classes.jar 把该jar改下名字即可。原创 2017-01-20 16:04:45 · 1979 阅读 · 0 评论 -
Fragment返回键优雅的处理方式
Fragment中没法直接处理返回键,特别是Fragment有嵌套或者是嵌套在ViewPager中等等,处理返回键比较麻烦。网上找到了某位兄台的处理方式,感觉比较优雅,自己再进行简单封装了下,让使用更加方便。在 https://www.jianshu.com/p/fff1ef649fc0 基础上封装,感谢! 一、定义接口HandleBackInterface.java: ...原创 2017-12-27 16:53:12 · 11734 阅读 · 14 评论 -
扩大CheckBox点击区域两种方法
扩大点击区域,首先想到的是加个padding,代码如下:<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:background="@android:co...原创 2018-04-26 10:31:42 · 10385 阅读 · 0 评论 -
软键盘挡住WebView中输入框解决方法
如果是EditText,弹出软键盘好处理,会自动把输入框顶上来。但如果输入框实在WebView中,那就不好处理了。什么设置android:windowSoftInputMode属性之类的都无效,最后再这里找到了终极解决方法,测试过有效。附上链接:https://www.jianshu.com/p/306482e17080,感谢博主分享。里面已经描述听详细的了,这里我也把该方法记录下来。其实这是An...原创 2018-05-29 20:22:18 · 8994 阅读 · 9 评论 -
不规则按钮
实现思路是点击时候去判断该点的像素值,如果是透明的则认为没有点击。代码如下package com.dway.widget;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Color;...原创 2019-10-11 16:44:18 · 480 阅读 · 0 评论 -
播放器常用手势操控封装GestureView
一、播放器常用手势操控包括:1、单击显示和隐藏播放器控件;2、双击播放暂停;3、左侧上下滑动调节亮度;4、右侧上下滑动调节音量;5、左右滑动调节进度。二、手势检测帮助类PlayerGestureHelper。用于检测区分手势类型。代码如下:package com.dway.gesture;import android.content.Context;i...原创 2019-10-17 20:16:05 · 736 阅读 · 2 评论 -
图库开发相关记录(未完待续)
1、系统媒体库存放位置data/data/com.android.providers.media/databases/,目录下一般有external.db和internal.db。注意机器必须为debug版本的才能看到。2、读取媒体库方法Cursor cursor = getContentResolver().query( MediaStore.Image...原创 2019-07-06 14:31:24 · 561 阅读 · 0 评论 -
修改打包的APK文件名
有时打包的APK需要指定名字,比如需要APK带上release或者debug,带上版本号,带上打包日期等,虽然APK打包完后可以自己修改名称,但是还是有更好的方式的。可以直接在主module中的gradle加入如下代码:android { android.applicationVariants.all { variant -> ...原创 2019-06-19 20:47:05 · 2228 阅读 · 0 评论 -
系统应用Gallery2编译过程记录
一、代码对比D:\AndroidStudioProjects\Gallery2和X:\ldw\android7_0\packages\apps\Gallery2二、SecureCRT 编译cd work/ldw/android7_0source build/envsetup.shlunch选11. msm8937_64-userdebugcd packages/apps/...原创 2019-05-22 14:33:15 · 424 阅读 · 0 评论 -
try-with-resources语句
所谓try-with-resources语句就是在try后面加上resources,跟平常见到的try-catch语句有差别。先看个例子:File srcFile = new File(srcPath);File dstFile = new File(dstPath);try (FileInputStream fis = new FileInputStream(srcFile); ...原创 2019-02-13 17:15:47 · 1029 阅读 · 0 评论 -
通过事件拦截控制布局所有子view是否可响应手势操作
有时候需要控制一个布局下所有子view是否可以Click、Touch,例如不让布局下的SeekBar、Button等响应拖动和点击事件。可以通过事件拦截简单实现,在父布局中对事件进行拦截,那么其子view将不会获得Touch事件,也就无法响应Click和Touch了,对SeekBar而言则无法拖动、Button而言则无法点击。package com.dway.test;import ...原创 2019-01-17 17:09:02 · 1124 阅读 · 0 评论 -
存储设备挂载和卸载监听StorageReceiverHelper
一、监听存储设备挂载和卸载的帮助类:package com.dway.receiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import an...原创 2018-12-03 20:49:06 · 507 阅读 · 0 评论 -
Android自适应基础
Android系统开放,设备众多,自适应是个很麻烦的工程。不仅不同系统版本的适应,最头痛的还是不同分辨率、不同像素密度的适配。网上有很多谈自适应技巧的文章,有些可能看着不是很理解甚至有些带着坑,所以有必要先对一些基础概念有所了解,再谈自适应吧。 一、首先解释一个概念:屏幕密度1、解释:英文表述为dpi:dots per inch,或者PPI:pixels per inch。意思很明显是...原创 2018-09-22 10:00:14 · 1079 阅读 · 0 评论 -
Android正确获取屏幕像素和密度等
Android如何准确获取屏幕宽高、密度。需要注意在不同版本有点区别,4.2增加虚拟导航栏,导致旧的方法获取的屏幕高度不包括导航栏。所以需要区分版本去获取。顺便提下,这货WindowManager windowManager = activity.getWindowManager()跟这货WindowManager windowManager = (WindowManager)co...原创 2018-09-21 19:55:37 · 5211 阅读 · 0 评论