Android问题Bug工具_Aron
2017-09-11 09:38:36 0 举报
AI智能生成
记录Android开发中遇到的一些问题和Bug,喜欢就点个赞吧
作者其他创作
大纲/内容
Linux编译Android
子主题
7.0SystemUI的安装后权限
猜测: 签名问题
USER_PRESENT 解锁后进入home桌面
没权限,发送广播只能是系统app,data/data下不能call发送广播
子主题
找不到资源id
资源id存在,名字也是对的,就是编译不过
1,clear代码
2. 试着修改资源名字
子主题
安卓Linux编译环境
jack-admin start-server 总是卡住
端口被占用
cd ~到根目录
vi .jack-settings
cd .jack-server
vi config.properties
安卓根目录
make -j32 错误,提示make update-api
make update-api -j32;make -j32
编译某个项目 总是1/1 100% Leaving
看看Android.mk格式是PC还是Unix ,可以用Vim和Notepad++
改格式
改格式
没有编译出with-local/classes.dex
1.可能虚拟机 虚拟内存不足
free -m
查看虚拟内存
查看虚拟内存
还有另一种方法是修改如下文件(这个我没有实际验证,留在这里以备参考而已):
build/core/definitions.mk xx@xxxxxxx:~/WORKING_DIRECTORY/build/core$
diff definitions.mk definitions.mk.OLD1557c1557<
$(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx1024M) \--->
$(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx2048M) \ -JXmx2048M) 改为-JXmx1024M)
build/core/definitions.mk xx@xxxxxxx:~/WORKING_DIRECTORY/build/core$
diff definitions.mk definitions.mk.OLD1557c1557<
$(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx1024M) \--->
$(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx2048M) \ -JXmx2048M) 改为-JXmx1024M)
kernel/msm-3.18
AndroidKernel.mk
改成P1
HW_VERSION=P1
ninja: fatal: fork: Cannot allocate memory
-j16改成-j8或者-j4
改系统属性和进程数
free
查看剩余内存
sysctl kernel.pid_max
查看最大进程数
ps -eLf | wc -l
查看进程数
杀死Jack进程释放内存
还剩43兆
jack-admin list-server
jack-admin kill-server
free
还剩1000兆
Android.mk
LOCAL_DEX_PREOPT := false
true
会把java代码写到oat文件中,即apk中不包含classes.dex
为了加快运行速度,把dex分出来做的预处理
false
只生成.apk文件
LOCAL_JACK_ENABLED
这个变量可以禁止使用Jack编译工具链编译该模块。在工作中,个人感觉目前jack工具链不是很稳定,经常会出现一些错误,比如:ERROR: Security problem, see Jack server log (/tmp/jack-liujinwei/jack-8072.log)这个时候,我就会在Android.mk中禁止该工具链。
LOCAL_JACK_ENABLED := disabled
WITH_DEXPREOPT
这个变量的使能导致system image中的所有东西都被提前优化(pre-optimized)。这可能导致system image非常大。
WITH_DEXPREOPT := true
LOCAL_MODULE_TAGS
LOCAL_MODULE_TAGS :=user eng tests optionaluser: 指该模块只在user版本下才编译eng: 指该模块只在eng版本下才编译tests: 指该模块只在tests版本下才编译optional:指该模块在所有版本下都编译
system.prop
有一个property的值 ro.config.wallpaper=/system/media/journeyui-theme/wallpaper/launcher_wallpaper_01.png
出现的问题
repo sync -j8
error.GitError: manifests rev-list ('^HEAD', u'7edad705a660c3299a67afcacc034a4220b63e2b', '--'):
fatal: bad object 7edad705a660c3299a67afcacc034a4220b63e2b
fatal: bad object 7edad705a660c3299a67afcacc034a4220b63e2b
git命令更新.repo/manifest的代码
git pull --rebase
然后在执行repo sync命令
make 出现编译依赖问题 need by
cd 到想要编译的单独项目
尝试mma命令
Starting build with ninja
ninja: Entering directory `.'
ninja: error: 'out/target/product/msm8953_64/obj_arm/SHARED_LIBRARIES/libqct_resampler_intermediates/export_includes',
needed by 'out/target/product/msm8953_64/obj_arm/SHARED_LIBRARIES/libaudioresampler_intermediates/import_includes',
missing and no known rule to make it
make: *** [ninja_wrapper] Error 1
解决:配置好java环境和jack_vm_args。
# set java 8
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# set for android N build
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
echo "ANDROID_JACK_VM_ARGS=$ANDROID_JACK_VM_ARGS"
jack-admin start-server 打不开
改端口
用户根目录下~/.jack.settings
~/.jack.server/config.properties
改权限
chmod 600 ~/.jack.server/config.properties
-rw-------
其中某个项目编译出错
那么单独编译该项目,如
make YotaDevicesSDK -j16
第三方包的问题
Glide
Glide加载图片还是显示之前的图片
原因:url图片路径没有改变,Glide缓存了
解决方案
1..每次加载都清理缓存。但这个方法是不可取的,
会导致每次都去网络加载图片.
显示非常慢. 这就相当于废弃了缓存这个好用的功能.
会导致每次都去网络加载图片.
显示非常慢. 这就相当于废弃了缓存这个好用的功能.
Glide.with(this)
.load(uri)
.asBitmap()
.centerCrop()
.diskCacheStrategy( DiskCacheStrategy.NONE )//禁用磁盘缓存
.skipMemoryCache( true )//跳过内存缓存
.placeholder(R.mipmap.ic_head_default)
.transform(new GlideCircleTransform(this)).into(headIV);
2.叫后台返回不同url的链接:即当图片更换的时候,后台返回的url也要改变,这样你本地就会重新加载网络图片。这才是根本解决方法.
OKHttp
上传进度回调很慢
应用Bug
相机
相机拍照没有位置信息
问题描述
开启了gps和网络,也打开了记录位置开关,当其他应用使用了定位时,可以记录位置
原因
使用requestLocationUpdates,并不能即时获取位置,如果想即时获取使用getLastKnownLocation
停止运行
log关键字
NullPointException
Crash
fatal
FATAL EXCEPTION: main
E/AndroidRuntime:
AndroidRuntime:
ANR
event log
am_crash
am_finish_activity
am_destroy_activity
am_proc_died
大批died,可能是关机重启
has died:
工具问题
Android Studio
更新连接错误
代理
19. SDK Manager 下载 代理 mirrors.neusoft.edu.cn 端口80
自动配置脚本URL
没有Android Monitor等一些窗口
切换至project 找到.idea/workspace.xml
搜 ToolWindowManager
加上
<window_info id="Android Monitor" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.8967922" sideWeight="0.4974293" order="7" side_tool="false" content_ui="tabs" />
重启即可
如果还没有,估计要重装AS了
setting--》plugins--》找到“Android Support”选项,并勾选,然后会提示重启android studio
子主题
导入module 提示找不到module中的类
方案一 无效
app/build.gradle
compile project(':cylib')
<orderEntry type="module" module-name="cylib" exported="" />
settings.gradle
include ':app', ':cylib'
app.iml加上
<orderEntry type="module" module-name="cylib" exported="" />
还是没用
猜想二 gradle版本问题
1.将gradle版本从2.3.3改成2.2.3
gradle-wrapper.properties 改成2.14.1-all
cysdk里面的内容引入成功了
不是重点
把cylib中build.gradle 注释掉一些就可以了
/*libraryVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.aar')) {
// 输出apk名称为cy_analysis-1.0_2015-01-15_coolyota.aar
def fileName
if (variant.buildType.name.equals('release')) {
fileName = "cy_analysis-${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.aar"
} else if (variant.buildType.name.equals('debug')) {
fileName = "cy_analysis-${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}-debug.aar"
}
output.outputFile = new File(outputFile.parent, fileName)
}
}
}*/
/*productFlavors {
baoliyota {}
coolyota {}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}
}
sourceSets {
coolyota {
java.srcDir 'src/main/java'
}
}*/
Gradle
gradle版本
gradle:2.2.3
gradle-2.14.1-all.zip
gradle:2.3.1
gradle-3.3-all.zip
gradle:2.3.3
gradle-3.3-all.zip
AS3.0Canary1
gradle:2.3.3
distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-all.zip
#distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-milestone-1-all.zip
AS3.0
gradle-4.1-all.zip
gradle:2.3.3
gradle:3.0.0
遇到的问题
outputFile Read-only
As Android plugin 3.0 migration guide suggests:
Use all() instead of each()
Use outputFileName instead of output.outputFile if you change only file name (that is your case)
Use all() instead of each()
Use outputFileName instead of output.outputFile if you change only file name (that is your case)
buildTools必须26.0.2以上
All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
Dimensions
Moudle和主项目须一致
Error:Execution failed for task ':common:mockableAndroidJar'.
> java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException:
com.android.builder.utils.FileCache$FileCreatorException: java.lang.NullPointerException
> java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException:
com.android.builder.utils.FileCache$FileCreatorException: java.lang.NullPointerException
方法一:
设置下as:
Go to File -> Settings -> Build, Execution, Deployment -> Compiler
Add to "Command-line Options": -x :app:mockableAndroidJar
Press "OK" and try to Rebuild Project again.
Go to File -> Settings -> Build, Execution, Deployment -> Compiler
Add to "Command-line Options": -x :app:mockableAndroidJar
Press "OK" and try to Rebuild Project again.
-x :app:mockableAndroidJar -x :common:mockableAndroidJar
方法二:
gradle 去掉这个task任务
原因:大概用了一些隐藏的api
配置
Gradle 语法
打印
println 'Hello, Gradle!'
String someString = 'mY_nAmE'
println "Original: " + someString
println "Original: " + someString
Build
AS编译
点9图片编译出错
运行没问题,编译生成apk时gradle报错
Build 编译报错
Error:Cannot create directory \app\build\intermediates\incremental\packageDebug\zip-cache
改权限
sudo chmod -R a=rwx app
chmod -R 777 app
删除app/下build目录
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define Lcom/squareup/leakcanary/watcher/R;
项目/.idea/libraries
删除leakcanary-anlysis和 watcher
把leakcanary版本1.5.2改成1.3
Success
The version of Gradle you are using (3.3) does not support the forTasks() method on BuildActionExecuter. Support for this is available in Gradle 3.5 and all later versions.
将 gradle-wrapper.propertie中
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
改为
distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-milestone-1-all.zip
clean一遍,大功告成,编译之后,会变成
distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-all.zip
Error:Error converting bytecode to dex:
Cause: Dex cannot parse version 52 byte code.
This is caused by library dependencies that have been compiled using Java 8 or above.
If you are using the 'java' gradle plugin in a library submodule add
targetCompatibility = '1.7'
sourceCompatibility = '1.7'
to that submodule's build.gradle file.
Cause: Dex cannot parse version 52 byte code.
This is caused by library dependencies that have been compiled using Java 8 or above.
If you are using the 'java' gradle plugin in a library submodule add
targetCompatibility = '1.7'
sourceCompatibility = '1.7'
to that submodule's build.gradle file.
出现这个现象的原因是你的jar包是基于jdk 1.8的,
但当前AS默认使用的jdk是1.7的。
添加如下两句话,使你的项目适配JDK1.8。
但当前AS默认使用的jdk是1.7的。
添加如下两句话,使你的项目适配JDK1.8。
没用
2
把一个complie的jar包改成provider
com.google.protobuf plugin was already applied to the project: : and will not be applied again after plugin: android
WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'.
WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'.
gradle:3.4.1
protobuf
AS3.4.1
第三方库问题,建议将gradle版本改成3.2.1
protobuf 0.8.6
AS3.2.1以上
gradle-4.6-all.zip
gradle:3.0.0
protobuf:0.8.3
AS3.0
gradle:2.3.0
protobuf:0.7.7
AS2.3.3
Sync
Error:Unable to load class 'org.gradle.api.internal.component.Usage'.
Possible causes for this unexpected error include:
Possible causes for this unexpected error include:
- Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network) - The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart) - Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.
Error:(23, 13) Failed to resolve: com.android.support:appcompat-v7:25.4.0
Add Google Maven repository and sync project
Show in File
Show in Project Structure dialog
Add Google Maven repository and sync project
Show in File
Show in Project Structure dialog
listary 搜索host
edit Host
203.208.51.47 maven.google.com
203.208.51.40 dl.google.com
203.208.51.40 dl.google.com
#203.208.51.47 maven.google.com
#203.208.51.40 dl.google.com
#203.208.51.40 dl.google.com
build.gradle加上google()
gradle.properties
systemProp.http.proxyHost=203.208.51.47
systemProp.http.proxyPort=808
systemProp.https.proxyHost=203.208.51.40
systemProp.https.proxyPort=808
systemProp.http.proxyPort=808
systemProp.https.proxyHost=203.208.51.40
systemProp.https.proxyPort=808
貌似无效
使用镜像
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
Error:Execution failed for task ':app:processReleaseResources'.
> Failed to execute aapt
> Failed to execute aapt
点击最后一行:See complete output in console
跳转到 Gradle Console查看报错详情
一般情况是资源重复,或者AndroidManifest.xml的权限重复
gradlew clean --stacktrace
发现是下载不了gradle:3.0.1
在根目录的build.gradle的repositories下加上google()
新建gradle.properties
android.enableAapt2=false
关闭aapt2的编译,即可
Configuration with name 'debugAndroidTestCompile' not found
gradle 版本和 protobuf 依赖版本不匹配导致的,所以用新的 protobuf 就可以了
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.6'
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.6'
2.3.3 ---> 0.8.0
No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android
用低版本的AS
或者把gradle改成3.1版本以上
如gradle 3.1.2
buildTools 27.0.3
gradle-4.6-all.zip
命令行gradlew报错
不能找到classpath
配置环境变量
配置host,google
203.208.51.47 maven.google.com
203.208.51.40 dl.google.com
203.208.51.40 dl.google.com
https://maven.google.com
https://dl.google.com/dl/android/maven2/
ip可变,百度ip查询
203.208.40.56 maven.google.com
203.208.40.39 dl.google.com
203.208.40.39 dl.google.com
windows
windows”→“System32”→“drivers”→“etc”
c:/windows/System32/drivers/etc/host
Linux
etc/host
配置gradle.properties
Android项目中的prop和用户目录下的.gradle下的gradle.properties都修改试试
Android项目中的prop和用户目录下的.gradle下的gradle.properties都修改试试
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=1080
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password
systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080
systemProp.https.proxyUser=userid
systemProp.https.proxyPassword=password
systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost
systemProp.http.proxyPort=1080
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password
systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080
systemProp.https.proxyUser=userid
systemProp.https.proxyPassword=password
systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost
可直接下载
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0.0/builder-3.0.0-sources.jar
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0.1/builder-3.0.1-sources.jar
猜测Linux系统使用了openjdk
org.apache.http.ssl.SSLInitializationException
com.google.common.util.concurrent.UncheckedExecutionException
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目
com.google.common.annotations:普通注解类型。
com.google.common.base:基本工具类库和接口。
com.google.common.cache:缓存工具包,非常简单易用且功能强大的JVM内缓存。
com.google.common.collect:带泛型的集合接口扩展和实现,以及工具类,这里你会发现很多好玩的集合。
com.google.common.eventbus:发布订阅风格的事件总线。
com.google.common.hash: 哈希工具包。
com.google.common.io:I/O工具包。
com.google.common.math:原始算术类型和超大数的运算工具包。
com.google.common.net:网络工具包。
com.google.common.primitives:八种原始类型和无符号类型的静态工具包。
com.google.common.reflect:反射工具包。
com.google.common.util.concurrent:多线程工具包。
com.google.common.base:基本工具类库和接口。
com.google.common.cache:缓存工具包,非常简单易用且功能强大的JVM内缓存。
com.google.common.collect:带泛型的集合接口扩展和实现,以及工具类,这里你会发现很多好玩的集合。
com.google.common.eventbus:发布订阅风格的事件总线。
com.google.common.hash: 哈希工具包。
com.google.common.io:I/O工具包。
com.google.common.math:原始算术类型和超大数的运算工具包。
com.google.common.net:网络工具包。
com.google.common.primitives:八种原始类型和无符号类型的静态工具包。
com.google.common.reflect:反射工具包。
com.google.common.util.concurrent:多线程工具包。
AS版本
AS3 canary1
adb 进程杀不死
重启电脑才能连上
adb kill-service
adb start-service
ADB server didn't ACK
端口被占用
AS问题
修改User
在IDE启动的时候,重写user的变量名称。
找到IDE的安装目录/bin下面的idea.exe.vmoptions 和idea64.exe.vmoptions这两个文件,在里面添加
-Duser.name=huqiwen(在些修改为自己想要的名称)
然后重启IDEA。
第一次启动慢
在Android Studio安装目录下的 bin 目录下,找到 idea.properties 文件,在文件最后追加disable.android.first.run=true 。
disable.android.first.run=true
F2查看文档卡住
当前用户\.AndroidStudio2.3\config\options\jdk.table.xml
javadocPath:文档的路径
sourcePath:源码路径
将sorucePath节点下url的值“file://D:/Android/android-sdk/sources/android-25”(这是我自己的sdk路径)复制,替换掉javadocPath的url节点的值。
sourcePath:源码路径
将sorucePath节点下url的值“file://D:/Android/android-sdk/sources/android-25”(这是我自己的sdk路径)复制,替换掉javadocPath的url节点的值。
文件内容不对
1. 删除.gradle , .idea , build 三个文件夹,注意不要删错了哦。
2. 给项目文件夹改名
然后改项目文件夹名称,测试OK
如果改完后运行报错,点击build->clean project ,然后再点击 rebuild project
如果改完后运行报错,点击build->clean project ,然后再点击 rebuild project
配置
签名
build.gradle
local.properties
Linux
编译Android系统APP unknown "SystemUI"
Android.mk的编码Unix可能是PC,所以识别不了
System.image
编译
make system
打包System.image
make snod
系统
类加载loadClass
ClassNotFound
android.os.BadParcelableException:
ClassNotFoundException when unmarshalling
ClassNotFoundException when unmarshalling
程序的写法
报错的语句即为config = in.readParcelable(null);
原因分析
readParcelable (ClassLoader loader)
loader A ClassLoader from which to instantiate the Parcelable object, or null for the default class loader.
即loader为空时系统会采取默认的class loader。
loader A ClassLoader from which to instantiate the Parcelable object, or null for the default class loader.
即loader为空时系统会采取默认的class loader。
事件分发
ListView中有Button,ItemClick事件失效
崩溃 异常 Bug
某些机型
某些方法
setBack
系统版本
Android5.1 Notification
连接蓝牙输入设备时Activity重启
可在AndroidManifest.xml上的activity加上
android:configChanges="keyboard|keyboardHidden"
android:configChanges="keyboard|keyboardHidden"
四大组件
广播
有些广播不能静态注册
如:监听电池电量的
Intent.ACTION_BATTERY_CHANGED
android.intent.action.BATTERY_CHANGED
文件读写问题
外置SD卡,读了文件后没有close导致页面闪退
子主题
刷机问题
Sensor无用,背屏不能解锁
原因
格式化刷机后(现烧android8.0需要格式化刷机),会将所有分区都擦掉,然后下载user版或user_debug版本的软件,因这两种软件版本有部分分区是禁止下载的,比如persist分区,这个分区中保存着sensor的配置信息及校准数据,该分区只有工厂版本才会允许下载,所以格式化后不经工厂版本直接下载非工厂版本会导致sensor无作用。
解决办法
在已刷的软件版本目录中找到persist.img文件,将其通过fastboot写入手机的persist分区中
adb reboot bootloader
fastboot flash persist [persist.img文件路径]
fastboot reboot
TextView
Textview maxline=1 ellipsize="end" 导致中英文数字混合分割错误的问题
你好啊430000000呵呵呵呵呵呵呵…(理想的显示)
结果在一些手机上 特别是5.0以下的手机 显示成
你好啊…
结果在一些手机上 特别是5.0以下的手机 显示成
你好啊…
(String) TextUtils.ellipsize(str,tv1.getPaint(),dp2px(120), TextUtils.TruncateAt.END);
第一个参数是: 想要设置给textview的文本内容
第二个参数是: textview的paint系统会用这个paint那测量文字有多长
第三个参数是: textview的宽度 这个宽度一般都能通过布局拿到 根据求取屏幕宽度 减去它左边和右边的布局就能知道多宽了
地四个阐述是: 截断方式
返回值: 系统根据textview的paint和textview宽度 返回一个正确的截断字符串
第一个参数是: 想要设置给textview的文本内容
第二个参数是: textview的paint系统会用这个paint那测量文字有多长
第三个参数是: textview的宽度 这个宽度一般都能通过布局拿到 根据求取屏幕宽度 减去它左边和右边的布局就能知道多宽了
地四个阐述是: 截断方式
返回值: 系统根据textview的paint和textview宽度 返回一个正确的截断字符串
内存问题
Bitmap: Error, cannot access an invalid/free'd bitmap here!
产生原因:调用了bitmap.recycle()方法
界面问题
setClipChildren(false)失效
子view动画还是不能超出父布局
子view动画还是不能超出父布局
其实问题的关键就是,RecyclerView的父布局指定了高度,而item也指定了高度,而父布局的高度不足以包住item。在这种情况下,即使设置了clipchidren也无效。所以只要将父布局的高度增大到足够包裹下放大后的item即可。
子视图对应的父层必须指定一个高度,不然没有效果,类如当前的LinearLayout高度为48dp;
结论: LinearLayout,ViewPager没问题,PagedView有问题
cardView.setClipToOutline(false);
如果你的CardView设置了圆角,那么ClipToOutline为false,圆角效果就会消失
// 大概的意思就是圆角属性是裁剪CardView得到的,所以我们突出CardView布局的部分也会被裁剪掉
// 如果你的需求满足,那么可以给CardView设置一个圆角的背景
// 大概的意思就是圆角属性是裁剪CardView得到的,所以我们突出CardView布局的部分也会被裁剪掉
// 如果你的需求满足,那么可以给CardView设置一个圆角的背景
v.setClipChildren(clipped);
v.setClipToPadding(clipped);
v.setClipToPadding(clipped);
0 条评论
下一页