美文网首页
android开发其他零散知识点

android开发其他零散知识点

作者: liboxiang | 来源:发表于2018-11-09 15:50 被阅读12次
    <android.support.v7.widget.AppCompatTextView
            android:layout_width="match_parent"
            android:layout_height="35dp"
            android:gravity="center"
            android:textSize="16sp"
            android:maxLines="1"
            app:autoSizeTextType="uniform"
            app:layout_constraintBottom_toTopOf="@id/list_base_bottom" />
    
    • 当集合里面的对象属性被修改后,再调用remove()方法时不起作用。
      例:
    public static void main(String[] args) 
    { 
    Set<Person> set = new HashSet<Person>(); 
    Person p1 = new Person("唐僧","pwd1",25); 
    Person p2 = new Person("孙悟空","pwd2",26); 
    Person p3 = new Person("猪八戒","pwd3",27); 
    set.add(p1); 
    set.add(p2); 
    set.add(p3); 
    System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:3 个元素! 
    p3.setAge(2); //修改p3的年龄,此时p3元素对应的hashcode值发生改变 
    
    set.remove(p3); //此时remove不掉,造成内存泄漏
    set.add(p3); //重新添加,居然添加成功 
    System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:4 个元素! 
    for (Person person : set) 
    { 
    System.out.println(person); 
    } 
    }
    
    • 匿名内部类、非静态内部类会持有外部类的this引用
      匿名内部类、非静态内部类和外部类生命周期是相同的,不会造成内存泄漏。除非外部类static持有内部类或者其他原因造成无法释放

    • AlertDialog使用注意
      导致报这个错是在于新的AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context),但我们不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。

    • 调整图片大小

    Drawable dr = getResources().getDrawable(R.drawable.search_icon);
            Bitmap bitmap = ((BitmapDrawable) dr).getBitmap();
    // Scale it to 50 x 50
            Bitmap bitmap1 = Bitmap.createScaledBitmap(bitmap, 10, 10, true);
            Drawable d = new BitmapDrawable(getResources(), bitmap1);
    
    • sp、dp和px
      px是指像素,但是不同手机屏幕像素密度不一样,不建议使用
      当手机字体设置为正常的时候,sp等于dp。sp会随着手机系统字体设置而改变
      对应转换关系如下:
    public static int dpFromPx(final Context context, final float px) {
            return (int)(px / context.getResources().getDisplayMetrics().density + 0.5f);
        }
    
        public static int pxFromDp(final Context context, final int dp) {
            return (int)(dp * context.getResources().getDisplayMetrics().density + 0.5f);
        }
    
        public static int spFromPx(final Context context, final float px) {
            return (int)(px / context.getResources().getDisplayMetrics().scaledDensity + 0.5f);
        }
    
        public static int pxFromSp(final Context context, final int sp) {
            return (int)(sp * context.getResources().getDisplayMetrics().scaledDensity + 0.5f);
        }
    
    • activity会在其onDestroy方法中将对其包含的任何视图的引用设置为null

    • ViewStub、include、merge
      有bar.xml和activity.xml, include用于activity.xml中,merge用于bar.xml中

    With merge:

    LinearLayout (root)
    |
    TextView
    

    With include:

    LinearLayout (root)
    |
    LinearLayout
    |
    TextView
    

    ViewStub
    ViewStub 是一个不可见的,大小为0的视图,可以在运行过程中延时加载布局资源。当ViewStub被设置成可见,或者它的inflate() 方法被调用的时候,布局资源才会被填充,然后ViewStub本身就会被填充起来的布局资源替换掉。也就是说 ViewStub 被设置成可见或者它的inflate() 方法被调用之后,在视图树中就不存在了。被填充的布局在替换ViewStub的时候会使用ViewStub的布局参数(LayoutParameters),比如 width ,height等。此外,你也可以通过ViewStub的inflateId 属性定义或者重写 被填充布局资源的id。
    https://www.jianshu.com/p/175096cd89ac

    相关文章

      网友评论

          本文标题:android开发其他零散知识点

          本文链接:https://www.haomeiwen.com/subject/tdsoxqtx.html