这边主要记录一些杂乱的知识点,算学习开发过程中碰到的坑。会持续更新,别问我为什么,因为坑永远填不满- -
1. 自定义布局的时候,当使用了如下红色代码,意思是将该布局添加到this所在的自定义的布局中。
当使用该布局时,显示的就是my_layout.xml 中的布局
相当于addView();
package com.example.stormxz.framelayouttest; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.widget.FrameLayout; /** * Created by stormxz on 2017/9/25. */ public class MyFrameLayout extends FrameLayout { private Context mContext; public MyFrameLayout(@NonNull Context context) { super(context); mContext = context; init(); } public MyFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); mContext = context; init(); } private void init() { LayoutInflater.from(mContext).inflate(R.layout.my_layout, this); } }
2. textview 滑动
xml 中添加textView属性:
android:scrollbars="vertical"
通过id获得textView对象,设置参数:
textView.setMovementMethod(ScrollingMovementMethod.getInstance());
3. 判断当前线程是否是主线程方法之一
Log.d("stormxz", "onResponse" + (Looper.getMainLooper().getThread() == Thread.currentThread()));
4. 使用okhttp3时,访问成功回调方法onResponse
public void onResponse(Call call, Response response) throws IOException { String s = response.body().string(); Message message = new Message(); message.obj = s; message.what = 1; handler.sendMessage(message); }
不能将参数response 直接发送消息出去,否则会报线程错误;也就是说response.body() 方法必须在子线程中执行
4. 剩余 XX 天的3种方式
(1) 3个拼接 剩余 + XX + 天
(2) String.xml
通过String.Format进行格式化
<string name="vip_days">"剩余%2$s天"</string>
String.format(ResUtils.getString(R.string.vip_days), day, day)
(3) 在plurals_strings.xml中添加item
</plurals> <plurals name="recentlyplay_txt_remainder_time"> <item quantity="other">"剩余 %d 分钟"</item> </plurals>resId = R.plurals.recentlyplay_txt_remainder_time, 后面为值
getResources().getQuantityString(resId, quantity, formatArgs)
5. Android studio出现下面错误时,一般都是同一个类有多个地方引用,而问题的所在是由于项目的依赖包或库重复了
Error:Execution failed for task ':iDOQRcode:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/sv/String.class
先查找com/google/sv/String.class这个类是在哪一个包中,不出意外,在你的依赖项目里面有一个相同的类,我们只需要把其中一个删除就好了
6. @TargetApi(android api level) 用来兼容版本api的,加了前缀的方法不会因为api版本不高而空跑该方法。
一般是在方法中进行level的判断,而执行不同的方法,用来兼容不同版本手机
7. 字符串中单复数的使用 第四点的补充
<plurals name="xxx_days"> <item quantity="one">%1$sday left</item> <item quantity="zero">%1$sdays left</item> <item quantity="two">%1$sdays left</item> <item quantity="few">%1$sdays left</item> <item quantity="many">%1$sdays left</item> <item quantity="other">%1$sdays left</item> </plurals>
zero |
语言需要对数字0进行特殊处理。(比如阿拉伯语) |
one |
语言需要对类似1的数字进行特殊处理。(比如英语和其它大多数语言里的1;在俄语里,任何以1结尾但不以11结尾的数也属于此类型。) |
two |
语言需要对类似2的数字进行特殊处理。(比如威尔士语) |
few |
语言需要对较小数字进行特殊处理(比如捷克语里的2、3、4;或者波兰语里以2、3、4结尾但不是12、13、14的数。) |
many |
语言需要对较大数字进行特殊处理(比如马耳他语里以11-99结尾的数) |
other |
语言不需要对数字进行特殊处理。 |
getResources().getQuantityString(resId, quantity, formatArgs)
资源文件路径 为res\values\plurals_strings.xml;当然可以根据不同语言进行写不同的xml文件
8. Android Studio Can't start Git
Android Studio Can't start Git: git.exe Probably the path to Git executable is not valid. Fix it. 导致无法看git的提交记录。可点击Fix it 或者按下面步骤:
Android studio -> File -> Settings -> Version Control -> Git
一般来说本地安装Git, 这边配置git路径为...\Git\bin\git.exe的位置
9. 当Android studio出现没有代码提示后,可以根据如下步骤尝试解决:
File-> Power Save Mode 去掉打勾
10.访问SD 卡 crash 问题
error 如下:
06-21 22:23:40.934 2715 2715 E AndroidRuntime: Process: com.android.gallery3d, PID: 2715
06-21 22:23:40.934 2715 2715 E AndroidRuntime: java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/85AE-19E6/DCIM/Camera/TRIM_20180621_222339.mp4
06-21 22:23:40.934 2715 2715 E AndroidRuntime: at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:712)
06-21 22:23:40.934 2715 2715 E AndroidRuntime: at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:401)
06-21 22:23:40.934 2715 2715 E AndroidRuntime: at com.android.gallery3d.app.TrimVideo$3$1.run(TrimVideo.java:270)
06-21 22:23:40.934 2715 2715 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:790)
06-21 22:23:40.934 2715 2715 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 22:23:40.934 2715 2715 E AndroidRuntime: at android.os.Looper.loop(Looper.java:164)
06-21 22:23:40.934 2715 2715 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6518)
06-21 22:23:40.934 2715 2715 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
06-21 22:23:40.934 2715 2715 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
06-21 22:23:40.934 2715 2715 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
解决方案:在配置文件中添加 <root-path path="." name="root_path"/>
参考链接:https://www.jianshu.com/p/121bbb07cb07
在使用FileProvider 时,解决方案中的配置文件所指的就是file_paths
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.android.gallery3d.fileProvider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>