1. android WebView 加载重定向页面无法后退解决方案

webView.setWebViewClient(new WebViewClient() {            @Override          public boolean shouldOverrideUrlLoading(WebView view, String url) {                             return false;          }        });  

2. GridView 内容自动居中显示

设置完 android:numColumns的个数之后GridView会自动从左到右排列,当不足一行的时候可以通过代码动态设置NumColumns来实现不足一行内容居中的效果

mGridView.setNumColumns(list.size);

3. Calendar类add()与roll()方法的区别

  • abstract void add(int field, int amount)
    根据日历的规则,为给定的日历字段添加或减去指定的时间量。
  • abstract void roll(int field, boolean up)
    在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。
// 采取add()方法 时间会推进到8月1号Calendar calendar1 = Calendar.getInstance();calendar1.set(2017, Calendar.JULY, 31);calendar1.add(Calendar.DATE, 1);// 采取roll()方法 时间会回滚到7月1号Calendar calendar2 = Calendar.getInstance();calendar2.set(2017, Calendar.JULY, 31);calendar2.roll(Calendar.DATE, 1); 

4. 显示超过一屏的网络长图

先将图片从网上下载到本地,然后经过Bitmap处理后,再加载

Glide.with(this).load(RequestUrl.BASE_URL + photoUrl)                .downloadOnly(new SimpleTarget() {                    @Override                    public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation) {                    // 将保存的图片地址给SubsamplingScaleImageView,这里注意设置ImageViewState设置初始显示比例                    Bitmap bitmap= BitmapFactory.decodeFile(resource.getAbsolutePath(),getBitmapOption(1));                     // 显示处理好的Bitmap图片                    imageView.setImageBitmap(bitmap);                }            });

ImageView的adjustViewBounds属性,设置它为true

android:adjustViewBounds="true"

5. 执行强制安装命令

如果应用已经获取了root权限了,那么我们可以实现自动安装,即不会出现应用安装的页面,会在后台自己慢慢的安装,这个时候使用的就是用代码去写命令行了

/** * 应用程序运行命令获取 Root权限,设备必须已破解(获得ROOT权限) * * @param command 命令:String apkRoot="chmod 777 "+getPackageCodePath(); RootCommand(apkRoot); * @return  0 命令执行成功 */public static int RootCommand(String command) {    Process process = null;    DataOutputStream os = null;    try {        process = Runtime.getRuntime().exec("su");        os = new DataOutputStream(process.getOutputStream());        os.writeBytes(command + "\n");        os.writeBytes("exit\n");        os.flush();        int i = process.waitFor();        Log.d("SystemManager", "i:" + i);        return i;    } catch (Exception e) {        Log.d("SystemManager", e.getMessage());        return -1;    } finally {        try {            if (os != null) {                os.close();            }            process.destroy();        } catch (Exception e) {        }    }}

这个方法就是将命令写入到手机的shell中,su就代表root权限了,而命令执行成功的话,会返回0的,接下来是安装命令

String command = "pm install -r " + mApkPath;

-r 代表强制安装,否则如果手机中已有该应用的话就会安装失败了,值得注意的是,要想等待命令执行的结果这个过程是很漫长的,所以在使用命令的时候是需要放到子线程中的

6. 时间格式化的细节处理

SimpleDateFormat f = newSimpleDateFormat("yyyy-mm-dd HH:mm:ss");

yyyy-mm-ddHH:mm:ss中月份的mm是必须大写(MM)的,否则会导致在格式化时会把分钟的时间放到月份位置,而小时的HH代表的24小时制,hh代表12小时制

7. JAVA中double类型运算结果异常的解决

对两个double类型的值进行运算,有时会出现结果值异常的问题,从二进制转化为十进制浮点数时,精度容易丢失,导致精度下降,要保证精度就要使用BigDecimal类.
 double类型四则运算例子:

1、相加

     public static double add(double a1, double b1) {           BigDecimal a2 = new BigDecimal(Double.toString(a1));           BigDecimal b2 = new BigDecimal(Double.toString(b1));           return a2.add(b2).doubleValue();       }

2、相减

 public static double sub(double a1, double b1) {       BigDecimal a2 = new BigDecimal(Double.toString(a1));       BigDecimal b2 = new BigDecimal(Double.toString(b1));       return a2.subtract(b2).doubleValue();   }

3、相乘

 public static double mul(double a1, double b1) {       BigDecimal a2 = new BigDecimal(Double.toString(a1));       BigDecimal b2 = new BigDecimal(Double.toString(b1));       return a2.multiply(b2).doubleValue();   }

4、相除

 public static double div(double a1, double b1, int scale) {     if (scale < 0) {           throw new IllegalArgumentException("error");       }     BigDecimal a2 = new BigDecimal(Double.toString(a1));       BigDecimal b2 = new BigDecimal(Double.toString(b1));       return a2.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();   }

scale参数为除不尽时,指定精度。

8. 在 LinearLayout 添加分割线 divider

LinearLayout有两个属性

1、divider

android:divider = ""

divider可以是图片文件,也可以是xml绘制的shape。
使用shape的时候一定要添加 ,一定要添加color,即使是透明也要写上

<?xml version="1.0" encoding="utf-8"?>        

2、showDividers

android:showDividers = "middle|end|beginning|none"
  • middle 在每一项中间添加分割线
  • end 在整体的最后一项添加分割线
  • beginning 在整体的最上方添加分割线
  • none 无
  1. dividerPadding 设置间隔

9. 绘制垂直居中的文字基准线

int centerY = getHeight() / 2;float baseLine = centerY + -(mPaint1.getFontMetrics().top + mPaint1.getFontMetrics().bottom) / 2 ;

10. couldn't find "xxx.so" 问题解决

 defaultConfig {        ndk {            abiFilters 'armeabi'        }}

指定要ndk需要兼容的架构(这样其他依赖包里mips,x86,armeabi,arm-v8之类的so会被过滤掉)

11. 不同属性下获取imageview的背景的Drawable

android:src

Drawable d = imageView.getDrawable();

android:background

Drawable d = imageView.getBackground();

12. Fragment的OnViewCreate方法会在事务提交后,在分线程中执行

如果直接在transaction.add(fragment).commit();后操作fragment中的view组件,可能会出现NullPointerException
因此,如果要在添加完fragment后立即操作fragment的view组件,应将操作写在fragment类的onViewCreated()方法中。

其他相关文章

Android 开发经验Tips(1) http://www.jianshu.com/p/c2c8ccd53636
Android 开发经验Tips(2) http://www.jianshu.com/p/21bc9c2a6563
Android 开发经验Tips(3) http://www.jianshu.com/p/79c417568075
Android 开发经验Tips(4) http://www.jianshu.com/p/b83c961d9587

更多相关文章

  1. Pycharm安装PyQt5的详细教程
  2. Android(安卓)Activity界面切换添加动画特效
  3. Android(安卓)环境搭建
  4. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  5. Android(安卓)流式布局FlowLayout(搜索历史),多布局、删除、添加
  6. Android(安卓)bluetooth介绍(四): a2dp connect流程分析
  7. 第一章 andriod studio 安装与环境搭建
  8. Android(安卓)命令行编译、打包生成apk文件
  9. Ionic 运行报错No resource identifier found for attribute 'ap

随机推荐

  1. Android(安卓)OpenGL ES 开发教程(5):关于
  2. 实现Android的消息通知栏
  3. android,ExpandableList,将被选中的group置
  4. 数据存储之文件存储
  5. android之RadioButton与RadioGroup,CheckB
  6. freeglut中提供的几种立体几何对象绘制的
  7. okHttp3学习总结
  8. android 中 Proguard 和JNI 相关
  9. 关于 SimpleAdapter 适配器
  10. Ubuntu下ndk-build编译C++出错:non-numeri