我的应用程序适用于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">
如何以编程方式更改app:elevation?我可以更改android:elevation但我找不到如何更改app:elevation!
答案 0 :(得分:31)
尝试使用以下代码
ViewCompat.setElevation(View, int)
按照以下链接。这里展示了如何在棒棒糖前设备上进行提升
答案 1 :(得分:7)
我想提供更新的完整答案:
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;
}
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>
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>
答案 2 :(得分:6)
接受的答案实际上不起作用。答案应该已经更新。
如果你看一下为什么mAppBarLayout.setTargetElevation(0)
被弃用。它声明:
现已弃用@deprecated目标提升。 AppBarLayout的高程现在通过{@link android.animation.StateListAnimator}控制。 此方法现在始终返回0.
因此,要以编程方式设置appbar布局,您只能在StateListAnimator
res文件夹中创建appbar_state_unelevated_animator
,例如animator
来执行此操作:
<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
,但不要相信我的话。
<强>更新强>
根据我的经验,当你设置 app:elevation =“//任何DP值//”
应用栏的阴影将会丢失。简单地删除该行以再次获得appbar阴影。
答案 3 :(得分:4)
由于您尝试更改操作栏的高程,您可以轻松使用此行,这将适用于API 19
getSupportActionBar().setElevation(0);
或者您按照此链接查看如何在API 21下方更改Android视图的提升
答案 4 :(得分:0)
接受的答案对我没用。
要删除工具栏中的阴影,请使用
AppBarLayout xml或中的 app:elevation="0"
在java中使用mAppBarLayout.setTargetElevation(0)
。
它适用于我的情况。
答案 5 :(得分:0)
以下解决方案适用于NativeScript
let nativeAnView = tnsView.android;
var shape = new android.graphics.drawable.GradientDrawable();
shape.setShape(android.graphics.drawable.GradientDrawable.OVAL);
shape.setColor(android.graphics.Color.parseColor('#30bcff'));
nativeAnView.setBackgroundDrawable(shape);
nativeAnView.setElevation(20);
Android上的
let nativeView = tnsView.ios;
nativeView.layer.shadowColor = new Color('#888888').ios.CGColor;
nativeView.layer.shadowOffset = CGSizeMake(0, 2.0);
nativeView.layer.shadowOpacity = 0.5;
nativeView.layer.shadowRadius = 5.0;
iOS上的