如何以编程方式更改应用:高程

2022-09-01 16:29:37

我的应用适用于 API 19。所以我不能使用android:elevation。所以我在我的布局中应用:高程。

Android XML: android:elevation vs.app:elevation

例如:

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay"
    app:elevation="5dp">

如何以编程方式更改应用程序:高程?我可以更改android:elevation,但我找不到如何更改app:elevation!


答案 1

尝试使用以下代码

ViewCompat.setElevation(View, float)

按照下面的链接。这里展示了如何在前棒棒糖设备上进行提升

安卓应用 21 提升


答案 2

接受的答案实际上不起作用。答案应该已经更新。

如果你看看为什么被弃用。它指出:mAppBarLayout.setTargetElevation(0)

@deprecated目标高程现已弃用。AppBarLayout的提升现在通过{@link android.animation.StateListAnimator}进行控制。此方法现在始终返回 0。

因此,要以编程方式设置应用栏布局,您只能通过创建一个(例如在 res 文件夹中)来执行此操作:StateListAnimatorappbar_state_unelevated_animatoranimator

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item>
    <objectAnimator
        android:propertyName="elevation"
        android:valueTo="4dp"
        android:valueType="floatType"
        android:duration="100"/>
</item>

然后在代码中加载它,如下所示:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        appbar.stateListAnimator = AnimatorInflater.loadStateListAnimator(applicationContext, R.animator.appbar_state_unelevated_animator)
    }

如果我没有记错的话,你也可以创建一个按代码,但不要相信我的话。StateListAnimator

更新:

根据我的经验,当您设置应用程序时:elevation=“//Any DP值//”

应用栏的影子将丢失。只需删除该行即可再次获得应用栏阴影。


推荐