Android学习总结的tips

  1. CardView要在布局最外边,不然阴影显示不全

  2. 获取app的目录
    获取当前程序路径
    getApplicationContext().getFilesDir().getAbsolutePath();
    获取该程序的安装包路径
    String path=getApplicationContext().getPackageResourcePath();
    获取程序默认数据库路径
    getApplicationContext().getDatabasePath(s).getAbsolutePath();

  3. TextUtils.isEmpty(s) 判断字符串s是否为双空,即null或者长度为0

  4. 获取某一天是星期几

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(format.parse(pTime));//pTime是我们的日期,格式"2016-03-04"
int i = c.get(Calendar.DAY_FOR_WEEK);

返回值1是星期日,2是星期一,以此类推

  1. 计算两个日期之间的天数
    计算出两个日期之间的毫秒数,转换成天数。
    private int getDays(String day1, String day2) {
        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
            Date date1 = simpleDateFormat.parse(day1);
            Date date2 = simpleDateFormat.parse(day2);
            GregorianCalendar cal1 = new GregorianCalendar();
            GregorianCalendar cal2 = new GregorianCalendar();
            cal1.setTime(date1);
            cal2.setTime(date2);
            return (int)((cal2.getTimeInMillis()-cal1.getTimeInMillis())/(1000*3600*24));
        } catch (ParseException e) {
            e.printStackTrace();
            return -100;
        }
    }
  1. 存储目录
    package = Io.github.yuedev
//内部存储
context.getCacheDir
/data/data/Io.github.yuedev/cache
context.getFileDir
/data/data/Io.github.yuedev/files
context.getDir
/data/data/Io.github.yuedev
//外部存储
context.getExternalCacheDir
/sdcard/Android/data/io.github.yuedev/
cachecontext.getExternalFilesDir
/sdcard/Android/data/Io.gothub.yuedev/files
Environment.getExternalStorageDirectory
/sdcard/
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES)
/sdcard/Movies
  1. API21以上使用旧版本的DatePicker样式
    API21(Lolipop)开始引入MD风格的DatePicker,如果我们想用之前的DatePicker样式,在XML的datePicker里使用以下属性
android:calendarViewShown="false"
android:datePickerMode="spinner"

注意,仅能在API21以上只用android:datePickerMode属性。

8.想给Fragment传递参数的话,不要用带参数构造方法,Fragment最好只有默认的无参构造方法。传参数用setArguments()方法。

9.利用String.split()拆分字符串,利用replace()修改字符串。

String path = "sdcard/test.mp2";
String[] strings = path.split("/");

这样strings数组内容就是sdcard和test.mp2

String fileName = strings[1].replace("mp2", "mp3");

这样,fileName的值就是test.mp3

10.TextView内容过多显示省略号,用ellipsize属性。比如在xml里:

android:ellipsize="end"

11.设计支持库com.android.support:design在28版本后新增了几种view,比如MaterialCardView和MaterialButton,其中MatreialCardView比之前的CardView多了几种常用属性,比如stroke描边。x

    app:cardCornerRadius="10dp"  
    app:cardElevation="0dp"           
    app:strokeWidth="1dp"              
    app:strokeColor="@android:color/darker_gray"
    app:cardBackgroundColor="@android:color/holo_orange_light"

12.RecyclerView视图错乱
如果在自己定义的adapter或者viewHolder里数据源有if的时候,一定跟上一个else,这样保证每次复用都会进行一次赋值。详细见下边这篇文章。
https://www.jianshu.com/p/6b990f339f49

        public void bind(Note note) {
            mNote = note;
            mCardView.setCardBackgroundColor(getResources().getColor(mNote.getColorResId()));

            //这里mNote的背景如果是白色,给mCardView描边。
            //一定要在else里给不是白色背景的mCardView设置描边宽度为0,不然会出现描边错乱。
            if (mNote.getColorResId() == R.color.backgroundColor0) {
                mCardView.setStrokeColor(getResources().getColor(R.color.defStrokeColor));
                mCardView.setStrokeWidth(3);
            } else {
                mCardView.setStrokeWidth(0);
            }
        }

13.TextView的fontFamily可以定义字体,每个api的字体可能稍有不同,具体在SDK文件夹的platform文件夹下里边的font.xml查看,貌似对中文不起作用。textAppearance属性可以使用google推荐的字体样式,如大小颜色等,api21可以用material标准,api21以下用appcomat的标准也很好。

  1. 在用tint改变view的颜色时,经常需要用到TintList类型,一般是用ColorStateList.valueOf(colorId)方法。这里的colorId不能直接用我们的resId,需要先用ContextCompat.getColor(context, resId)获取colorId。
val colorId = ContextCompat.getColor(imageView.context, resId)
ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(colorId))

或者

ImageViewCompat.setImageTintList(imageView,  ContextCompat.getColorStateList(imageView.context, resId)

具体见官方的databinding demo
https://codelabs.developers.google.com/codelabs/android-databinding/

推荐阅读
http://kaywu.github.io/2016/07/17/Android-Storage-Note/

你可能感兴趣的:(Android学习总结的tips)