bry*_*410 18 android android-support-library android-support-design
从Android支持库v23.4.0升级到v24.0.0时,以编程方式将高程设置为0,AppBarLayout停止工作:
appBayLayout.setElevation(0);
Run Code Online (Sandbox Code Playgroud)
在XML中设置高程时它确实有效.
bry*_*410 26
编辑
在AppBarLayout从v24.0.0使用StateListAnimator,定义根据其状态高程.因此,setElevation如果StateListAnimator正在使用a(默认情况下会发生),则使用将无效.设置elevation经由XML或以编程方式(无论对于API> = 21):
StateListAnimator stateListAnimator = new StateListAnimator();
stateListAnimator.addState(new int[0], ObjectAnimator.ofFloat(view, "elevation", 0));
appBarLayout.setStateListAnimator(stateListAnimator);
Run Code Online (Sandbox Code Playgroud)
老答案
这似乎是设计支持库的一个问题.问题与使用编程方式设置高程的方式有关setElevation.从XML设置它是StateListAnimator在视图中放置而不是调用setElevation.但是,setElevation应该工作.
这里有一个解决方法:
setDefaultAppBarLayoutStateListAnimator(appBarLayout, 0);
@SuppressLint("PrivateResource")
private static void setDefaultAppBarLayoutStateListAnimator(final View view, final float targetElevation) {
final StateListAnimator sla = new StateListAnimator();
// Enabled, collapsible and collapsed == elevated
sla.addState(new int[]{android.R.attr.enabled, android.support.design.R.attr.state_collapsible,
android.support.design.R.attr.state_collapsed},
ObjectAnimator.ofFloat(view, "elevation", targetElevation));
// Enabled and collapsible, but not collapsed != elevated
sla.addState(new int[]{android.R.attr.enabled, android.support.design.R.attr.state_collapsible,
-android.support.design.R.attr.state_collapsed},
ObjectAnimator.ofFloat(view, "elevation", 0f));
// Enabled but not collapsible == elevated
sla.addState(new int[]{android.R.attr.enabled, -android.support.design.R.attr.state_collapsible},
ObjectAnimator.ofFloat(view, "elevation", targetElevation));
// Default, none elevated state
sla.addState(new int[0], ObjectAnimator.ofFloat(view, "elevation", 0));
view.setStateListAnimator(sla);
}
Run Code Online (Sandbox Code Playgroud)
这取自构造函数的作用,ViewUtilsLollipop在v24.0.0中调用类中的方法.
另一个可能的解决方案是添加android:stateListAnimator="@null"到您的AppBarLayout,如下所示.
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stateListAnimator="@null"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4759 次 |
| 最近记录: |