一、 ImageView.setImageUri(Uri)显示不出图片
网上有这样的各种解决方案:
- ****将targetSdkVersion给注释掉
- targetSdkVersion和minSdkVersion保持一致
- 设置可见性:setVisibility(View.VISIBLE)
这些方法有的可以,有的不行,或许跟版本有关,或许Android本身不是很支持用setImageUri从网上获取图片吧!与其煞费苦心让这个方法有效,不如用ImageLoader来加载网上图片 吧!
二、 apk无法安装
- The currently selected variant "debug" uses split APKs...
解决方法
在build.gradle(app)文件的defaultConfig里面添加如下代码:
ndk {
abiFilters 'armeabi'// 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
}
添加好以后,sync now即可。若依然出现这样的问题,可尝试重启Android Studio,若问题依旧,那我也不知道了-_-#,可以试着修改一下abiFilters的参数。
三、 DrawerLayout must be measured with MeasureSpec.EXACTLY
这个问题出现的原因多是:
多个可滑动的控件在同一个布局界面中嵌套使用,导致滑动冲突,因而Android错误地计算了内层的可滑动控件的尺寸。
解决方法
重写控件的onMeasure 方法
public class WrapContentRecyclerView extends RecyclerView {
public WrapContentRecyclerView(Context context) {
super(context);
}
public WrapContentRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public WrapContentRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthSpec, int heightSpec) {
widthSpec = MeasureSpec.makeMeasureSpec(
MeasureSpec.getSize(widthSpec), MeasureSpec.EXACTLY);
heightSpec = MeasureSpec.makeMeasureSpec(
MeasureSpec.getSize(heightSpec), MeasureSpec.EXACTLY);
super.onMeasure(widthSpec, heightSpec);
}
}
四、 RecyclerView显示不了数据
RecyclerView 需要重新设置一下LayoutManger才可以显示:
// 计算RecyclerView的大小,可以显示器内容
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
五、 java.lang.IllegalStateException: RecyclerView has no LayoutManager
这个问题的原因是:
在RecyclerView中添加其他控件,如这样:
比如我实现RecyclerView的上拉加载功能,滑动到列表最底端,会出现“点击加载更多”,每次执行到这里的时候,就会出现RecyclerView has no LayoutManager。
解决方法
// 避免出现RecyclerView has no LayoutManager的错误
mRecyclerView.setHasFixedSize(true);
// 计算RecyclerView的大小,可以显示其内容
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
六、 Android Studio的LogCat无法打印信息
关掉手机或模拟器中运行的应用,重新打开应用即可。
七、 Error install apk
**方法一: 关闭Instant Run;方法一未解决,详见方法二 。
方法二:由于NDK默认支持的系统框架与调试的机子不符,可在build.gralde(Module:app)文件中合适的位置添加如下代码:
android {
defaultConfig {
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'x86'//, 'arm64-v8a', 'x86_64', 'mips', 'mips64'
}
}
}
若方法二未解决,详见方法三 。
方法三:拔掉手机,重插并重启Android Studio。
若方法三不行,建议你去买彩票吧!中了五百万就可以不用苦逼地写代码了。
八、 'int android.view.View.getImportantForAccessibility()' on a null...'
其详细报错信息是:
java.lang.NullPointerException:
Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()'
on a null object reference
这个错误多为ListView或GridView的Adapter中,getView方法返回null的结果。
九、 符号找不到
检查是否存在或R文件导包是否正确。
十、 使用ButterKnife,报控件空指针
这种情况多半是因为ButterKnife没有配置好,如今ButterKnife的最新版本是8.4.0,其配置方法如下:
Step 1: 配置app的build.gradle
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'com.jakewharton.butterknife'
...
dependencies {
...
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
}
Step 2: 配置project的build.gradle
buildscript {
repositories {
...
mavenCentral()
}
dependencies {
...
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
Step 3: 在Activity中绑定ButterKnife
ButterKnife.bind(this);
十一、 RecyclerView的item内容填充不满
Recyclerview的item设置的控件宽高,凡是MATCH_PARENT和weight="1"+0dp的,通通变成了WRAP_CONTENT!
其效果如图所示:
问题解决:
在填充内容的时候,我使用了View.inflate(Context, Layout, null)方法,如果我们将内容填充的方法改为LayoutInflater.from(Context).inflate(Layout, Parent, false)即可解决该问题。
知其然,知其所以然!我们来看看源码:
@param root A view group that will be the parent. Used to properly inflate the* layout_* parameters.
root参数是用来充当我们RecyclerView的item的父容器用的,如果我们将父容器设置为了null
,我们的item在设置大小上就没有了参照物,所以内容的现实效果都是WRAP_CONTENT。
If false, root is only used to create the correct subclass of LayoutParams for the root view in the XML.
上面的话说的是,如果我们将参数设置为false,我们RecyclerView的item子项还是有父容器可以依靠的,这个参数root作为父容器用来规范item子项用的。
十二、 Android5.0环境下的CardView无法显示阴影
CardView添加margin,外边距大小与阴影大小一致。
十三、 A TaskDescription's primary color should be opaque
Android的colorPrimary不允许带有alpha值。
十四、 canvas的drawText绘制的文字第一行显示不全
drawText以文字的左下角为坐标,所以绘制的时候需要预留出一个字高的高度。
十五、 Binary XML file line # : Error inflating class
出现这种问题的原因可归结为以下几类:
- xml中自定义控件的包名未填写完整
- 自定义控件构造方法没有将三个构造函数都实现
//Simple constructor to use when creating a view from code
View(Context context)
//Constructor that is called when inflating a view from XML
View(Context context, AttributeSet attrs)
//Perform inflation from XML and apply a class-specific base style
View(Context context, AttributeSet attrs, int defStyle)
- 中间文件没有清理干净
rebuild或clear一下工程 - 资源文件找不到
根据问题的不同具体解决。
十六、 LinearLayoutManager.scrollToPosition滚动无效
大家都知道,要想实现RecyclerView滚动,可以调用scrollToPosition方法,或得到它的LinearLayoutManager,然后调用scrollToPosition来实现,但是今天在同一个方法里调用scrollToPosition,发现上一行执行了,下面的行却未执行?
解决方案:
用LinearLayout.scrollToPositionWithOffset(position, 0)来替换scrollToPosition(position)方法。
原因分析:
scrollToPosition有效执行的条件是position对应的Item不在屏幕可见范围内,而scrooToPositionWithOffset无这样的限制,所以本人黄色框框里的代码无法实现滚动的原因是target对应的item在可见范围。
大坑持续挖掘中。。。