总结的一点小知识

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中,


    ...
    
        
    
    ...

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

  
  
      
          
          
          
          
          
          
          
          
      
  

在代码中,比如之前使用 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中的要一样。

你可能感兴趣的:(总结的一点小知识)