- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 Android TextView多行最后一行显示不全
最近发现个奇怪的问题CheckBox与TextView一起放在一个横向LinearLayout中,当TextView文字内容超过一行时,最后一行文字显示不全,给控件加上背景之后,发现TextView与父控件顶部有个间距,但是并没有设置这个间距。解决方案:方案一、LinearLayout加入android:gravity="center_vertical"属性方案二、把LinearLayout修改为RelativeLayout...
2022-04-18 14:50:44
3646
原创 Android Dialog一些设置记录
效果图示例代码:private void initWindow() { //获取Window Window window = getDialog().getWindow(); //设置Window背景色透明 window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); //获取Window属性 WindowManager.LayoutParams attributes =.
2022-03-23 15:54:17
2895
原创 Android vivo手机接入极光推送闪退
最近项目中用到推送功能,选择接入极光推送,可是根据官方文档接入之后,app一启动过一会就闪退,而且是必闪退,翻来覆去看了几遍文档,没有遗漏都开始怀疑人生了。然后定位问题,把极光推送初始化方法注释就不会闪退,问题就在初始化方法这里,最后终于发现问题,因为极光推送中可能会配置开启其他进程,有可能Application onCreate会执行多次,那么极光推送初始化方法会执行多次,导致崩溃,根据这个思路,我们要避免极光推送初始化方法执行多次,判断是UI进程才执行初始化方法,加入判断之后果然不闪退了。
2022-03-09 11:26:19
3573
原创 Android 极光推送华为厂商通道集成问题记录
本人根据极光推送文档华为厂商通道集成指南集成华为厂商通道后,一直并未打印上面的成功集成华为厂商通道的标志,最后发现只在华为开发者平台创建项目及应用,但是没有开通项目推送服务权限,也是被自己蠢哭了,在华为开发者平台开通项目推送服务后,成功打印华为厂商通道的标志,并且测试推送成功。下面是开启项目推送服务权限的步骤1. 前往“项目设置 > API管理”中开启“推送服务”权限。2. 在左侧导航栏选择“增长 > 推送服务”,点击“立即开通”,在弹出的提示框中点击“确定”。3...
2022-03-08 10:41:25
3644
原创 Android 6.0动态权限 shouldShowRequestPermissionRationale
shouldShowRequestPermissionRationale字面意思看是 应该显示请求权限原因已经通过的权限,方法返回为true禁止权限,方法返回为true禁止且不再询问权限,方法返回为false,需要到应用设置中开启权限...
2021-12-27 19:03:10
1291
原创 Android MVVM实践(ViewModel+LiveData+DataBinding)
Andorid常用的开发模式有MVP MVVM,MVP与MVVM不同之处在于MVP中的Presenter持有View层的引用,而MVVM中的ViewModel并未持有View层的引用,而是通过观察者模式完成数据的交互,从而ViewModel层与View层也完成解耦。这里使用Jetpack组件ViewModel+LiveData+DataBinding完成一个MVVM的例子目录结构如上所示:Model层处理网络请求及从数据库获取数据;View层负责UI展示及用户交互;ViewMode.
2021-12-22 10:47:24
1050
原创 Android 网络请求封装(Retrofit+OkHttp+RxJava+AutoDispose),解决网络请求引起的内存泄漏
Retrofit本质上是网络请求的封装库,并没有参与真正的网络请求操作,他为我们提供丰富的注解,用更优雅的方式包装网络请求需要的各个元素;OkHttp完成真正的网络请求操作,接收Retrofit获取的请求地址、请求头、参数等信息发起网络请求,获取网络数据;RxJava处理异步操作,他提供了丰富强大的操作符,使用RxJava来完成网络请求过程中繁琐的线程调度;AutoDispose,使用AutoDispose让网络请求订阅事件与Activity/Fragment生命周期关联,在页面销毁时,取消网络
2021-12-20 11:21:14
2879
3
原创 Android 橡皮擦功能,图层混合模式PorterDuff.Mode实践
先上效果图:使用图层混合模式注意点:1.图层类型设置为软件类型,有些api不支持硬件类型,默认视图是没有开启图层的setLayerType(LAYER_TYPE_SOFTWARE, null);2.创建新的图层来完成混合模式的运算(离屏绘制),然后更新到原始图层。如果直接在原始图层进行混合模式运算,原始图层的某些操作可能会影响混合模式运算结果,得不到预期的效果//离屏绘制int layer = canvas.saveLayer(0, 0, width, height, pa..
2021-11-25 10:34:32
1765
原创 Android Camera 计算合适的预览分辨率,解决预览拉伸问题
Android自定义相机过程中经常遇到相机预览画面拉伸的问题,这种情况是因为预览控件比例与当前相机预览分辨率比例不一致导致的,想要预览画面正常就要找到与预览控件比例最接近的相机预览分辨率,这里记录一下Camera获取最佳预览分辨率的方法/** * 获取最佳预览分辨率,解决预览拉伸问题 * * @param supportedSize 相机支持的预览分辨率 * @param screenResolution 控件宽高或屏幕宽高 * @return 与预览控件比例最接近预览分辨率 */
2021-11-17 17:36:35
2952
原创 Android代码修改ConstraintLayout约束关系
//代码修改ConstraintLayout约束关系ConstraintSet set = new ConstraintSet();//克隆父布局(ConstraintLayout)的约束关系set.clone(parentView);//清除childView布局文件里设置的某个约束set.clear(childView, ConstraintSet.TOP);//设置新的约束关系,下面效果相当于 app:layout_constraintBottom_toBottomOf="parent".
2021-11-12 00:14:55
4089
原创 Andorid 属性动画 ObjectAnimator 从一个控件位置平移缩放到另一个控件位置
private void translateScaleAnim(ImageView imageView, FrameLayout frameLayout, long duration) { AnimatorSet animatorSet = new AnimatorSet(); //平移动画 ObjectAnimator translationX = ObjectAnimator.ofFloat(imageView, "translationX", 0, f.
2021-10-18 17:24:32
2542
原创 Android view.setX() view.setY() layoutParams.topMargin layoutParams.leftMargin
onCreate中使用view.setX(380); view.setY(380);设置控件的位置,布局完成之后打印结果为:onCreate中使用layoutParams.topMargin = 380; layoutParams.leftMargin = 380;设置控件的位置,布局完成之后打印结果为:测试代码如下public class SecondActivity extends AppCompatActivity { @Override prote...
2021-10-14 18:34:26
1154
1
原创 Android webview 提示net::ERR_CACHE_MISS
//设置缓存模式为WebSettings.LOAD_CACHE_ELSE_NETWORKwebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);setCacheMode默认模式为WebSettings.LOAD_DEFAULTLOAD_DEFAULT优先从缓存获取未过期的资源加载,否则从网络加载资源;LOAD_CACHE_ELSE_NETWORK优先从缓存获取资源加载,即使缓存已过期,否则从网络加载资源.
2021-09-02 15:18:43
1071
原创 java定时每天指定时间执行任务
/** * @param time 每天几点执行定时任务 24小时制时间 例: 08:00:00 20:00:00 * @throws ParseException */private void timing(String time) throws ParseException { int hour = Integer.parseInt(time.substring(0, 2)); SimpleDateFormat format1 = new SimpleDateFormat
2020-11-17 17:06:29
6340
dex2jar-2.0
2017-09-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人