总结的一点小知识

1、在APP国际化中,当按钮上的字符从中文变成英文后,字符串会自动全部大写,可以用 android:textAllCaps="false" 属性,控制字符串是否自动大写。

2、当APP有设置生效需要重启APP时,可以重启到欢迎页面,这样交互比较好看,而且不会出现重启到主界面时的白屏或者黑屏。

3、当接口返回的数据有int类型数据时,为避免日后返回的数据突然不是int类型,所以写模型时int类型的数据,统一都用String来接收。

4、如果想让EditText不自动取得焦点,则可以在EditText的父布局设置

android:focusable="true"  
android:focusableInTouchMode="true" 

属性,即可。

5、在使用RecyclerView时,有时候会需要刷新RecyclerView中item的状态,一般我们可能使用notifyDataSetChanged()来刷新状态,但是使用notify系列的方法时有可能会导致失去焦点(这是一个BUG),因此我们可以使用局部刷新来刷新item的状态。

ViewHolder viewHolder = (ViewHolder) mRecyclerView.findViewHolderForAdapterPosition(position);
viewHolder.mCheck.setBackgroundResource(R.mipmap.collect_normal);

6、当APP存在账号切换功能时,如果APP内有数据是使用数据库来存储的,则在数据库帮助类中不要使用单列模式,否则切换账号后,会出现数据混乱的情况。

7、使用Glide加载图片时,有的图片第一次加载的时候只显示占位图,第二次才显示正常的图片。网上搜到集中解决方案,第一个是不使用占位图(对于我来说没用),第二是使用Glide的Transformation API自定义圆形Bitmap的转换。第三是不使用Glide的动画,加上一条.dontAnimate() (我就是这样解决的)。

8、getChildAt(int position)方法中position指的是当前可见区域的第几个元素,如果要得到position所对应的item,则应该使用View view = listview.getAdapter().getView(position,null,listview);

9、在Java中有Float.NaN 和 Double.NaN ,意思是Not a Number ,非数,是计算机科学中数值数据类型的一个值,表示未定义或不可表示的值。目前只在使用MPAndroidChart时,处理数据是使用到了,如果不想让MPAndroidChart绘制线条时,当数据为空,可以传入一个Double.NaN 或 Float.NaN,而不是传入0.

10、电脑上打jar包
(1)新建一个manifest.txt文件,在里面写一句就可以了:Manifest-Version: 1.0
(2)然后把manifest.txt的后缀改成.mf即变成了manifest.mf
(3)进入cmd,进入准备打包的那个根目录,这里把要打包的文件夹与manifest.mf放在了一个cd目录下
(4)输入:jar cvfm Notepad.jar manifest.mf Notepad
注:jar 是打包命令;cvfm 是参数; Notepad.jar 是打完包后的文件名;
参数c表示要生成一个新的JAR文件;f表示要生成的JAR文件的名字;m表示文件清单文件的名字。
*.class 只能把 class 文件打包进去,改成 . 可以把当前目录中的文件和文件夹全部打包进去。
(5)这里输入根目录或直接输入要打包的目录都可以,打出来的包是相同的

11、关于Fragment(XXFragment)not attached to activity 的异常
出现此异常是因为Fragment还没有attach到Activity,调用了getResource()等需要上下文context的函数。 解决方法是在调用此类方法前,先使用 isAdded()判断。

12、在适配Android7.0时,我们需要将Uri.parse、Uri.fromFile、file://、conteng://、context.getFilesDir()、Environment.getExternalStorageDirectory()、getCacheDir()、以及intent.setDataAndType 等做适配修改。首先需要定义一个FileProvider在Manifest.xml中,

<application>
    ...
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths"/>
    </provider>
    ...
</application>

其中grantUriPermissions需要设置为true,你才能获取临时共享权限。
然后我们在res-xml下新建filepaths.xml文件,文件名随意,需要与上面resource中的一致。

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <paths>  
        <!--  
        <files-path/>代表的根目录: Context.getFilesDir()  
        <cache-path/>代表的根目录: getCacheDir()  
        <external-path/>代表的根目录: Environment.getExternalStorageDirectory()  
        <external-files-path/>代表的根目录: Context.getExternalFilesDir(String) Context.getExternalFilesDir(null).  
        <external-cache-path />代表的根目录: Context.getExternalCacheDir().  
        <root-path />代表设备的根目录new File("/");  
        -->  
        <!-- path=""代表根目录,也可以指定特定目录,name="camera_picture"是虚拟目录camera_picture -->  
        <root-path name="root" path="" />  
        <files-path name="files" path="" />  
        <cache-path name="cache" path="" />  
        <external-path name="external" path="" />  
        <external-files-path name="external_files" path="" />  
        <external-cache-path name="external_cache" path="" />  
    </paths>  
</resources>  

在代码中,比如之前使用 Uri.fromFile() 方法生成一个 File Uri,现在我们需要使用FileProvider 类提供的公有静态方法 getUriForFile 生成 Content Uri。例如这里有个将Bitmap转换成Uri的方法:

public static Uri saveBitmap(Bitmap bm) {
        //在SD卡上创建目录
        File tmpDir = new File(AppUtils.getContext().getFilesDir() + "/images");
        if (!tmpDir.exists()) {
            tmpDir.mkdir();
        }

        File img = new File(tmpDir.getAbsolutePath() + "/" + System.currentTimeMillis()+ "share.png");
        try {
            FileOutputStream fos = new FileOutputStream(img);
            bm.compress(Bitmap.CompressFormat.PNG, 85, fos);
            fos.flush();
            fos.close();
            return FileProvider.getUriForFile(AppUtils.getContext(),
                    BuildConfig.APPLICATION_ID + ".provider", img);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
}

注意上面的.provider和Manifest.xml中的authorities中的要一样。

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

推荐阅读更多精彩内容