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"  <!--cardview的圆角角度-->
    app:cardElevation="0dp"           <!--cardview的高度-->
    app:strokeWidth="1dp"              <!--cardview外描边线的宽度-->
    app:strokeColor="@android:color/darker_gray"<!--cardview外描边线的颜色-->
    app:cardBackgroundColor="@android:color/holo_orange_light"<!--cardview卡片的颜色-->

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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容