如何以编程方式更改app:elevation

Era*_*eth 13 java android android-layout

我的应用程序适用于API 19.所以我不能使用android:elevation.所以我app:在我的布局中提升.

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">
Run Code Online (Sandbox Code Playgroud)

如何以编程方式更改app:elevation?我可以改变android:elevation但我找不到如何更改app:elevation!

Mas*_*sum 34

尝试使用以下代码

ViewCompat.setElevation(View, int)
Run Code Online (Sandbox Code Playgroud)

按照以下链接.这里展示了如何在棒棒糖前装置上进行升高

Android AppCompat 21提升


Arc*_*nes 9

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

如果你看看为什么mAppBarLayout.setTargetElevation(0)被弃用.它声明:

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

因此,要以编程方式设置appbar布局,您只能通过在res文件夹中创建StateListAnimator诸如:appbar_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>
Run Code Online (Sandbox Code Playgroud)

然后将其加载到代码中,如下所示:

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

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

更新:

根据我设置应用程序的经验:elevation ="//任何DP值//"

应用栏的阴影将会丢失.简单地删除该行以再次获取appbar阴影.


Mic*_*lsx 8

我想提供更新和完整的答案:

    switch (state) {
        case On:
            appBarLayout.setStateListAnimator(AnimatorInflater.loadStateListAnimator(getContext(), R.animator.appbar_elevation_on));
            break;
        case Off:
            appBarLayout.setStateListAnimator(AnimatorInflater.loadStateListAnimator(getContext(), R.animator.appbar_elevation_off));
            break;
    }
Run Code Online (Sandbox Code Playgroud)

RES\animator 下的 appbar_elevation_on.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="PrivateResource">
    <item>
        <objectAnimator
            android:propertyName="elevation"
            android:valueTo="@dimen/design_appbar_elevation"
            android:valueType="floatType" />
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

RES\animator 下的 appbar_elevation_off.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="PrivateResource">
    <item>
        <objectAnimator
            android:propertyName="elevation"
            android:valueTo="0dp"
            android:valueType="floatType" />
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)


Chr*_*ock 5

由于您尝试更改操作栏的高度,因此可以轻松使用此行,该行将适用于API 19

getSupportActionBar().setElevation(0);
Run Code Online (Sandbox Code Playgroud)

或者您点击此链接并查看如何在API 21以下更改Android上的视图高程

Android AppCompat 21海拔

  • 这就是改变 android:elevation。不是我想要的:x (2认同)
  • 不,那是行不通的。我除了 setAppElevation 或其他东西。 (2认同)