• Android开发易错


        在安卓开发中,遇到的各种坑,现在找个时间把这些错误整理下来,分享给各位,希望你们不要重走我犯下的错误,同时,也对我这段时间的开发的错误,重新温习下。
    
    • ViewPager的报错:ViewPager does not have a PagerAdapter set

      原因分析:
      因为没有设置adapter 就开始使用ViewPager了,例如我这里mTabLayout.setupWithViewPager(mViewPager);就在mViewPager.setAdapter(adapter);的前面使用了.

    • android编程时,当打开一个activity时,经常会因为内部存在editText类的组件,自动出现软键盘,影响视觉效果。

      解决办法:将editText的焦点换成别的组件,像TextView,Button等等,这样就不会出现软键盘了。

      先了解两句代码:
      View.setFocusable(true),对应xml : android:focusable=”true”.
      View.setFocusableInTouchMode(true),对应xml : android:focusableInTouchMode=”true”.
      两者的意思是让组件可以获得焦点。不过有些区别,前者执行false条件后,在执行true,还是不能获取焦点。后者执行上述过程,还是能获取焦点。
      当你加入上述代码后,在创建activity时,调用对应view的requestFocus(),这样就可以获得焦点了。当editText失去焦点了,也就不会有软键盘了.

    • Fragment嵌套Fragment要用getChildFragmentManager

    • 出现TextView.setText();出错的原因:
      原因:setText()有两种方法:
      一、final void setText(int resid);接收int型参数时,调用的是第一个方法,系统会去R文件里面找int值匹配的String值,在R文件里找不到这个值,所以会报错。
      二、final void setText(CharSequence text);
      如果你的R里没有对应的int值,但你还是想显示出int值,可以采用方法:setText(”“+int);

    • 当我们采用LinearLayout布局时,有特殊情况需要注意:
      1、对于 LinearLayout :

    当 android:orientation=vertical (垂直) 时,只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left,right,center_horizontal 是生效的。

    当 android:orientation=horizontal (水平) 时,只有垂直方向的设置才起作用,水平方向的设置不起作用。即:top,bottom,center_vertical 是生效的。

    2、对于 FrameLayout : 任意android:layout_gravity属性都有效,可以非常方便实现对组件的布局。

    • 这是java基础知识,用Java获取字符串长度,Java获取数组大小,Java获取集合大小,一一说明
      字符串通过length()方法:str.length()
      数组通过length属性:arr.length
      集合通过size()方法:list.size()
    • 编译器android.content.res.Resources$NotFoundException: String resource ID #0x1报错

    原因:一般发生在参数 int resId 错误,你把String赋值给int的resId,所以编译器找不到正确的resource于是报错。
    最简单的例子,检查一下你的Toast.makeText()啊textView.setText啊之类的函数,这种函数通常有几个重载,如:
    textView.setText(CharSequence text);
    textView.setText(int resId);
    ……
    如果不小心将一个int值传给了它,那它不会显示该int值,而是跑到工程下去找一个对应的resource的id,当然是找不到的,于是就报错啦。

    • List.add() 和 List.addAll() 的区别

    List.add() 方法,也是往List 中增加list,但是,它增加的是一个List 实例
    List.addAll()方法,就是规定了,自己的这个List 就是容器,往里面增加的List 实例,增加到里面后,都会被看成对象。
    当需要把多个List 实例放到一起的时候,必须使用List.addAll()方法.

    • 格式化数字

    0 一个数字
    一个数字,不包括 0
    . 小数的分隔符的占位符
    DecimalFormat df1 = new DecimalFormat(“0.0”);
    DecimalFormat df2 = new DecimalFormat(“#.#”);
    DecimalFormat df3 = new DecimalFormat(“000.000”);
    DecimalFormat df4 = new DecimalFormat(“###.###”);
    System.out.println(df1.format(12.34));
    System.out.println(df2.format(12.34));
    System.out.println(df3.format(12.34));
    System.out.println(df4.format(12.34));
    结果:
    12.3
    12.3
    012.340
    12.34

    • 代码中设置颜色主要两种
      第1种:tv.setTextColor(Color.RED);//系统自带的颜色类
      第2种:tv.setTextColor(0xffff00ff);//0xffff00ff是int类型的数据,分组一下0x|ff|ff00ff,0x是代表颜色整数的标记,ff是表示透明度,ff00ff表示颜色,注意:这里ffff00ff必须是8个的颜色表示,不接受ff00ff这种6个的颜色表示。

    • 在代码中创建布局方式和创建组件
      // 设置布局的第二种方式:在代码中创建一个布局,加到Activity中
      // 创建一个线性布局
      LinearLayout linearLayout = new LinearLayout(this);
      // 设置线性布局的宽,高:根据内容自动调整
      linearLayout.setLayoutParams(new LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
      // 添加TextView组件
      TextView tv = new TextView(this);
      // 设置组件TextView的内容
      tv.setText(“动态添加内容”);
      // 设置组件的高,宽
      tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
      LayoutParams.WRAP_CONTENT));
      // 将组件添加到布局中
      linearLayout.addView(tv);
      // 设置此Activity的布局方式
      this.setContentView(linearLayout);

    • Log打印不全

    服务器返回的json数据量比较大,然后我想在logcat中完全输出服务器返回的Json格式的字符串事,发现logcat中返回的信息中明显少了后面一节,刚开始还以为程序有bug,调试了好半天才发现原来程序没有bug,而是LogCat中的每次的Msg输出是有上限的,坑的我好惨啊,查了资料才发现,.原来logcat在实现上对于message的内存分配大概是4k左右.所以超过的内容都直接被丢弃

    • 正确拿到子控件的宽高的做法

    //监听全局布局
    iv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public void onGlobalLayout() {
    //布局改变后调用该方法
    Log.d(“tag”, “OnGlobalLayout width=”+iv.getWidth());
    //进行二次采样
    Bitmap bitmap=BitmapUtils.getBitmap(MainActivity.this,R.mipmap.oom,iv.getWidth(),iv.getHeight());
    //设置图片
    iv.setImageResource(R.mipmap.oom);
    //移除监听,为了防止布局多次调用
    iv.getViewTreeObserver().removeOnGlobalLayoutListener(this);
    }

    • 导第三方框架常见错误
      Error:(2, 0) Plugin with id‘com.github.dcendents.android-maven’ not found.
      解决办法
      找到project 的 build.gradle 添加如下代码
      classpath ‘com.github.dcendents:android-maven-gradle-plugin:1.3’
      classpath “com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0”

    buildscript {
    repositories {
    jcenter()
    }
    dependencies {
    classpath ‘com.android.tools.build:gradle:2.0.0-alpha3’
    classpath ‘com.github.dcendents:android-maven-gradle-plugin:1.3’
    classpath “com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0”
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
    }
    .最后 try again 或者 sync now 就 OK

  • 相关阅读:
    ajax回调中window.open弹出的窗口会被浏览器拦截的解决方法
    javascript中常见的函数封装 :判断是否是手机,判断是否是微信,获取url地址?后面的具体参数值,毫秒格式化时间,手机端px、rem尺寸转换等
    javascript正则表达式(regular expression)
    基于jquery类库的绘制二维码的插件jquery.qrcode.js
    javascript常见的数组方法
    javascript函数,构造函数。js对象和json的区别。js中this指向问题
    vue中的组件,Component元素,自定义路由,异步数据获取
    vue中自定义指令vue.direvtive,自定义过滤器vue.filter(),vue过渡transition
    vue的表单的简单介绍 input radio checkbox等表单特性
    Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
  • 原文地址:https://www.cnblogs.com/cxyquan/p/9746601.html
Copyright © 2020-2023  润新知