android开发其他零散知识点
- textView自适应字体大小
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview
Demo
<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