4

Je travaille sur une application Android TV mais je ne suis pas très satisfait de l'ombre standard rendue par le VerticalGridFragment, je voudrais l'avoir plus petit et un peu moins sombre.Android TV: dimension ombre et couleur de VerticalGridFragment

J'ai recherché dans le code mais je n'ai pas trouvé de solution de travail complète. Dans ma sous-classe VerticalGridPresenter, la seule méthode que je peux remplacer est createShadowOverlayOptions mais je ne peux pas obtenir le résultat souhaité.

La seule solution que je suis venu avec de définir les dimensions suivantes, de sorte que ceux déclarés dans la bibliothèque de soutien sont surchargées:

<dimen name="lb_material_shadow_details_z">3dp</dimen> 
<dimen name="lb_material_shadow_focused_z">4dp</dimen> 
<dimen name="lb_material_shadow_normal_z">3dp</dimen> 

Mais il est plus une bidouille plutôt qu'une solution appropriée.

Ceci est l'ombre standard:

Standard shadow

Ceci est le résultat que je reçois avec mon bidouille actuel:

enter image description here

Comme vous pouvez je vois, il est plus petit, mais je ne peux pas changer la couleur.

Existe-t-il un moyen approprié de définir la couleur de l'ombre et la cote pour les classes VerticalGridFragment et RowsFragment?

J'utilise la plus récente version Leanback:

compile 'com.android.support:leanback-v17:25.2.0' 

Mon minSdkVersion est 17 à cause d'un lecteur TV personnalisée Android, mais il est bien d'avoir faire fonctionner à partir de 21

Répondre

1

J'ai fait a demandé à l'équipe de Leanback à ce sujet avant et ils ont dit que la manière recommandée de personnaliser leurs composants est en remplaçant les styles et les dimensions. Donc, cela pourrait aider à apaiser certaines de vos inquiétudes. Cependant, nous avons également dû personnaliser les ombres sur nos vues. Nous l'avons fait en créant nos propres vues et nos propres présentateurs de vue (au lieu d'utiliser leur ImageCardView). Avec cela, nous étions en mesure de définir nos propres ombres au niveau de la présentation.

Si vous regardez la documentation pour ListRowPresenter les docs disent:

ListRowPresenter applique une ombre par défaut à chaque vue enfant. Appelez setShadowEnabled (booléen) pour désactiver les ombres. Une sous-classe peut remplacer et renvoyer false dans isUsingDefaultShadow() et la remplacer par sa propre implémentation d'ombre.

Pour voir plus de la façon dont ils traitent les ombres, s'il vous plaît regarder dans le code source de ListRowPresenter et vérifier également les ShadowHelper et ShadowHelperApi21 cours pour voir comment ils ont mis en œuvre en ajoutant des ombres à leurs éléments de liste. Nous avons simplement copié ces deux classes car elles sont locales.

Vous pouvez également remplacer ShadowOverlayHelper.Options createShadowOverlayOptions() par ListRowPresenter, ce qui vous permet de modifier le rayon de l'angle et le z focalisé et non focalisé.

+0

Merci pour les astuces: accepté car il me dirige vers les bonnes classes et la logique pour implémenter l'ombre personnalisée (bien sûr, je ne pouvais pas prétendre à une implémentation complète ici). – fasteque