蛋哥


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

webView的一些设置

发表于 2016-08-18   |   分类于 Android   |     |   阅读次数

    项目开发中嵌入webView记录一下遇到的坑,以及解决办法。

WebView出现的一些问题

1、页面加载不出来(解决对某些标签不支持问题)

1
2
 // 开启 DOM storage API 功能 
webView.getSettings().setDomStorageEnabled(true);

2、在Android 5.0上webview默认不允许加载http与https混合内容(加载的图片出不来)

1
2
3
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

阅读全文 »

view-滑动冲突

发表于 2016-06-06   |   分类于 Android   |     |   阅读次数

    上一篇记录了关于View事件的传递,这篇将记录一下关于View的滑动冲突问题。《Android开发艺术探索》书中非常好的总结了事件滑动冲突的场景以及解决办法,这里只是做一个笔记。

1、常见滑动冲突场景

  • 场景一:外部滑动方法和内部滑动方向不一致;
  • 场景二:外部滑动方向和内部滑动方向一致;
  • 场景三:上面两种情况的嵌套。

2、处理规则

当场景一,用户左右滑动,让外部的view拦截点击事件,用户上下滑动,让内部view拦截点击事件。只要有滑动,根据滑动的起始点与终止点坐标位置,判断垂直滑动距离大还是水平滑动距离大,做出相应的拦截处理。其他场景也是类似,根据情况做出处理。

阅读全文 »

view 事件传递

发表于 2016-06-03   |   分类于 Android   |     |   阅读次数

    最近项目上遇到复杂的界面事件冲突问题,解决了问题现在整理记录一下view的事件的分发机制。

1、基础知识

(1)事件处理类:

  • 事件传递——dispatchTouchEvent()
  • 事件拦截——onInterceptTouchEvent()
  • 事件消费——onTouchEvent()函数和OnTouchListener

(2)事件类型:

  • ACTION_DOWN:表示用户开始触摸.
  • ACTION_UP:表示用户在移动(手指或者其他).
  • ACTION_MOVE:表示用户抬起了手指.
  • ACTION_OUTSIDE: 表示用户触碰超出了正常的UI边界.
  • ACTION_CANCEL:表示手势被取消了
    多点触控下
  • ACTION_POINTER_DOWN:有一个非主要的手指按下了.
  • ACTION_POINTER_UP:一个非主要的手指抬起来了.

(3)事件发生的位置,X,Y轴:

  • getX() 获得事件发生时,触摸的中间区域在屏幕的X轴.
  • getY() 获得事件发生时,触摸的中间区域在屏幕的X轴.
    在多点触控中:
  • getX(int pointerIndex):获得X轴对应手指事件的发生位置.
  • getY(int pointerIndex): 获得Y轴对应手指事件的发生位置.
阅读全文 »

Android控件圆角和背景选择器的使用

发表于 2016-05-28   |     |   阅读次数

    在Android开发中为了美观或是和ios风格统一,控件往往设置成圆角,为了使控件有一个点击的效果我们会使用选择器来实现,这里简单介绍一下实现步骤。

1、给控件设置圆角

给控件设置圆角一般可以使用shape标签来实现,这里罗列一些shape的基本属性
有一个在线的shape编辑工具地址可以在线完成你想要的效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//round_bg.xml 
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<!--实心 就是填充的意思 color填充的颜色-->
<solid android:color="#ff0033"/>
<!--渐变 android:startColor和android:endColor分别为起始和结束颜色,
android:angle是渐变角度,必须为45的整数倍。
另外渐变默认的模式为android:type="linear",即线性渐变,
可以指定渐变为径向渐变,android:type="radial",
径向渐变需要指定半径android:gradientRadius="50"。-->

<gradient android:startColor="#ffffff"
android:endColor="#000000"
android:angle="90"
/>

<!--描边 android:width="2dp"
描边的宽度,android:color 描边的颜色。
我们还可以把描边弄成虚线的形式,设置方式为:
android:dashWidth="5dp"
android:dashGap="3dp"
其中android:dashWidth表示'-'这样一个横线的宽度,
android:dashGap表示之间隔开的距离。-->

<stroke android:width="2dp"
android:color="#ff9966"/>

<!--圆角-->
<!--android:radius为角的弧度,值越大角越圆。
我们还可以把四个角设定成不同的角度,方法为:
<corners
android:topRightRadius="20dp" 右上角
android:bottomLeftRadius="20dp" 右下角
android:topLeftRadius="20dp" 左上角
android:bottomRightRadius="20dp" 左下角
/>-->

<corners android:radius="5dp"/>
<!--padding 这个就不用多说了,XML布局文件中经常用到-->
<padding
android:left="1dp"
android:right="2dp"
android:top="3dp"
android:bottom="4dp"
/>

</shape>

阅读全文 »

Android中Parcelable和Serializable的区别

发表于 2016-05-15   |     |   阅读次数

    在Java开发中都知道有一个Serializable可以对象序列化,到了Android开发中又出来一个Parcelable,也可以实现对象的序列化。那他们都可以实现对象的序列化,那他们直接有到底会有什么区别呢?

1、对象序列化的作用:

java序列化主要是为了跨平台,实现对象的一致性,可在不同的平台上,保持自己原有的属性和方法不变 。总结来说就是:

1)永久性保存对象,保存对象的字节序列到本地文件中;
2)通过序列化对象在网络中传递对象;
3)通过序列化在进程间传递对象。

阅读全文 »

Android应用在内存不足被KILL时如何保存与恢复数据

发表于 2016-05-05   |   分类于 Android   |     |   阅读次数

    最近项目中出现一个bug在登录应用然后HOME键使用其他应用然后回到刚才的应用提示你下线重新登录,找了好久才发现是手机内存不足,应用被系统kill。Android独特的内存机制,导致系统内存不足时会销毁后台的应用,这里我们研究一下应用被销毁后重新加载时的情形
一个安卓应用A先后打开3个Activity: a –> b –> c 这个时候如果来了一个电话, 接电话的过程中, 手机内存不够, 那么应用A将会被系统回收当打完电话,再次进入应用A的时候会发生下面的事情:
1、系统会重新加载c,而且是在新线程中
2、现在点返回关闭c,系统就会重新加载b,而且是在新的线程中(跟c不是一个线程)
3、现在点返回关闭b,系统就会重新加载a,而且是在新的线程中(跟c,b的线程都不相同)
(就是先打开c,finish了c时加载b,finish了b时加载a)

注意: 这个时候应用中的全局静态变量将全部重置有默认值的为默认值,没有默认值的为null)

阅读全文 »

Android性能检测工具

发表于 2016-04-16   |   分类于 Android   |     |   阅读次数

记录一些关于Android性能检测的工具。

1. BlockCanary

  1. 说明:非侵入式的性能监控组件,简单几行代码就可以检测主线程上的各种卡顿问题,并通过组件提供的各种信息分析出原因并进行修复(目前已开源)
  2. 博客地址:http://blog.zhaiyifan.cn/2016/01/16/BlockCanaryTransparentPerformanceMonitor
  3. github:https://github.com/moduth/blockcanary

2. LeakCanary

  1. 说明:检测所有的内存泄漏(由square开源)
  2. 博客:http://www.liaohuqiu.net/cn/posts/leak-canary-read-me
  3. github:https://github.com/square/leakcanary

Moco实现客户端与服务端解耦

发表于 2016-04-13   |   分类于 Android   |     |   阅读次数

写在开头的话
       参与客户端开发的都程序员都知道客户端的开发的时候常常要依赖于服务端的开发,经常客户端发开进度受影响,原因有几点:

  • 服务端开发人员接口没有写好,自己写测试数据有些场景不太容易满足
  • 受网络影响很大,尤其是测试服务器很多不确定因素就挂了
  • 测试服务器在远程或是重启服务器耽搁时间
  • ………

所以为了解决这种问题我们可以使用moco轻松解决客户端与服务解耦问题,是客户端的开发不在依赖服务端,从而提高开发效率。

阅读全文 »

Crash 收集器

发表于 2016-04-13   |   分类于 Android   |     |   阅读次数

       在Android开发中经常会遇到各种各样的异常使程序闪退,每次的问题不尽相同,如果每次是链接电脑还可以通过log找到哪里的代码出错,可是有的时候闪退我们并不能很及时的捕获到异常,但是我们又想得到闪退时候的log日志,鉴于此一个Crash收集器显得大有用处了。
       我们可以将异常存储在本地也可以上传到服务器。本地信息可以便于我们快速找到出现错误的地方,上传服务器便于我们对异常信息进行分类总结整理,从而能够能快速的分析解决问题。

  • 异常的收集主要实现UncaughtExceptionHandler接口,具体看一下代码实现过程
阅读全文 »

AsynTask 使用解析

发表于 2016-04-12   |   分类于 Android   |     |   阅读次数

       在Android开发中往往要使用多线程操作,通常会进耗时操作放在单独的线程中执行,避免其占用主线程,但是子线程无法操作主线程,在子线程操作主线程会出错误。Android提供了Handle类来实现子线程更新UI线程,但是代码会显得臃肿,使用AsynTask一个轻量级的异步任务,任务在主线程之外运行,而回调方法是在主线程中执行,这就有效地避免了使用Handler带来的麻烦,会使代码清爽很多。
       如果每个任务都要创建一个线程,那么应用程序的效率要低很多,并且线程无法管理,匿名线程创建并启动后就不受程序的控制了,如果有很多个请求发送,那么就会启动非常多的线程,系统将不堪重负,为了解决以上的问题,Android在1.5版本引入了AsyncTask。AsyncTask是使用java.util.concurrent框架来管理线程以及并发任务的执行,concurrent框架是一个非常成熟,高效的框架,经过了严格的测试,因此AsyncTask很好的解决了多线程的问题。

1、AsyncTask的执行步骤

阅读全文 »
12
yuantang

yuantang

不要让放弃成为一种习惯

11 日志
1 分类
4 标签
github weibo
© 2016 yuantang
由 Hexo 强力驱动
主题 - NexT.Mist