web-dev-qa-db-fra.com

Comment changer app: élévation par programmation

Mon application fonctionne pour l'API 19. Je ne peux donc pas utiliser Android: l'altitude. Donc, je app: élévation dans ma mise en page.

Android XML: Android: altitude par rapport à application: altitude

Par exemple :

<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">

Comment changer app: élévation par programme? Je peux changer Android: altitude mais je ne trouve pas comment changer d'application: altitude!

8
Eraseth

Essayez d'utiliser le code suivant

ViewCompat.setElevation(View, int)

En suivant le lien ci-dessous. Ici a montré comment faire l'altitude sur un dispositif pré-Lollipop

Android AppCompat 21 Elevation

24
Masum

La réponse acceptée ne fonctionnera pas réellement. La réponse aurait dû être mise à jour.

Si vous regardez pourquoi mAppBarLayout.setTargetElevation(0) est obsolète. il déclare que:

L'élévation cible @deprecated est maintenant obsolète. L'élévation d'AppBarLayout est maintenant contrôlée via un {@link Android.animation.StateListAnimator}. Cette méthode renvoie maintenant toujours 0.

Donc, pour définir par programme la présentation de la barre d’application, vous ne pouvez le faire qu’en créant une StateListAnimator telle que appbar_state_unelevated_animator dans le dossier animator res:

<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>

puis en le chargeant dans le code comme ceci:

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

Si je ne me trompe pas, vous pouvez également créer un StateListAnimator par code mais ne prenez pas ma parole pour cela.

Mettre à jour:

Dans mon expérience lorsque vous définissez le app: elevation = "// Toute valeur DP //"

L'ombre de la barre d'application sera perdue. Supprimez simplement cette ligne pour obtenir à nouveau l’ombre de la barre d’application.

6

Puisque vous essayez de changer l’altitude de la barre d’action, vous pouvez facilement utiliser cette ligne, qui fonctionnera avec l’API 19 

getSupportActionBar().setElevation(0);

ou vous suivez ce lien et découvrez comment changer l'élévation des vues sur Android ci-dessous API 21 en général

Android AppCompat 21 Elevation

4
Chris Sherlock

La solution suivante est pour 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);

sur 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;

sur iOS

0
DrMabuse

La réponse acceptée n'a pas fonctionné pour moi.

Pour supprimer l'ombre dans la barre d'outils, utilisez

app:elevation="0" dans AppBarLayout xml ou

utilisez mAppBarLayout.setTargetElevation(0) en Java.

Cela a fonctionné dans mon cas.

0
vijay