AppBarLayout
의 고도를 0으로 설정하고 기본값으로 되돌리려 고합니다. 번에 (항상 아님) 및 만 (21 => 22 등)이 충돌합니다.AppBarLayout에 대한 고도/StateListAnimator를 설정할 때 Android JNI가 충돌합니다.
https://stackoverflow.com/a/37992366/2170109
내 실제 : (그것은 지원-LIB 24.0.0 이후 고도를 설정하기 위해 "공식적인"방법은 이후) 아래 링크에 설명 된대로 내가 StateListAnimator
을 사용하고
방법은 다음과 같습니다 : 두 개의 XML-파일 (다른 하나는 android:valueTo="0"
를 설정하는 것입니다)와 함께
public void setAppBarElevation(final boolean visible) {
if (appBar != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
appBar.setStateListAnimator(AnimatorInflater.loadStateListAnimator(this, (visible) ? R.animator.appbar_elevated : R.animator.appbar_not_elevated));
}
}
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<objectAnimator android:propertyName="elevation"
android:valueTo="@dimen/default_appbar_elevation"
android:valueType="floatType"/>
</item>
</selector>
내가 다른 안드로이드 버전 (API 19, 21, 23, 24, 25) 일부 장치를 테스트했고 그것은 단지 21
로그에 충돌의 IT 일부 JNI의 것을 보여줍니다 고도 설정시 -error합니다 (StateListAnimator
에서 오는 생각) :
--------- beginning of system
JNI DETECTED ERROR IN APPLICATION: cant call void android.view.View.setElevation(float) on null object
in call to CallVoidMethodV
from void android.animation.PropertyValuesHolder.nCallFloatMethod(java.lang.Object, long, float)
"main" prio=5 tid=1 Runnable
| group="main" sCount=0 dsCount=0 obj=0x72fc2000 self=0xf421c500
| sysTid=20172 nice=0 cgrp=apps sched=0/0 handle=0xf77de160
| state=R schedstat=(3803514732 320072004 1563) utm=340 stm=40 core=0 HZ=100
| stack=0xff6fb000-0xff6fd000 stackSize=8MB
| held mutexes= "mutator lock"(shared held)
native: #00 pc 00005b13 /system/lib/libbacktrace_libc++.so (UnwindCurrent::Unwind(unsigned int, ucontext*)+83)
native: #01 pc 00002e92 /system/lib/libbacktrace_libc++.so (Backtrace::Unwind(unsigned int, ucontext*)+34)
native: #02 pc 003c8f68 /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::mirror::ArtMethod*)+136)
native: #03 pc 00391f8d /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+285)
native: #04 pc 001006b0 /system/lib/libart.so (art::JniAbort(char const*, char const*)+1024)
native: #05 pc 0010125f /system/lib/libart.so (art::JniAbortF(char const*, char const*, ...)+111)
native: #06 pc 001016b2 /system/lib/libart.so (art::ScopedCheck::CheckVirtualMethod(_jobject*, _jmethodID*)+514)
native: #07 pc 00112340 /system/lib/libart.so (art::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, char*)+144)
native: #08 pc 000776ca /system/lib/libandroid_runtime.so (_JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...)+42)
native: #09 pc 00123ecb /system/lib/libandroid_runtime.so (???)
native: #10 pc 00089596 /data/dalvik-cache/x86/[email protected]@boot.oat (Java_android_animation_PropertyValuesHolder_nCallFloatMethod__Ljava_lang_Object_2JF+174)
at android.animation.PropertyValuesHolder.nCallFloatMethod(Native method)
at android.animation.PropertyValuesHolder.access$400(PropertyValuesHolder.java:38)
at android.animation.PropertyValuesHolder$FloatPropertyValuesHolder.setAnimatedValue(PropertyValuesHolder.java:1296)
at android.animation.ObjectAnimator.animateValue(ObjectAnimator.java:952)
at android.animation.ValueAnimator.animationFrame(ValueAnimator.java:1207)
at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1248)
at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:659)
at android.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:682)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:549)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5219)
at java.lang.reflect.Method.invoke!(Native method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
가 HID에 어떤 방법이 있나요 현재 지원 라이브러리를 사용하여 AppBar의 그림자 (다시 활성화) (현재 25.0.0을 사용하고 있지만 24.x.x와 충돌 함)?