android开发其他零散知识点

96
liboxiang
2018.11.09 15:50* 字数 533
<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
Gupao