Android 5.0 android:élévation de Travaux pour la Vue, mais pas le Bouton?
Dans l'Android 5.0 échantillons à partir du SDK Manager, il y a le ElevationBasic
de l'échantillon. Il montre deux View
objets: un cercle et un carré. Le cercle a android:elevation
ensemble de 30dp
:
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/floating_shape"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginRight="40dp"
android:background="@drawable/shape"
android:elevation="30dp"
android:layout_gravity="center"/>
<View
android:id="@+id/floating_shape_2"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="25dp"
android:background="@drawable/shape2"
android:layout_gravity="center"/>
</FrameLayout>
Sur une Nexus 9, l'exécution de l'échantillon -, nous obtenons une ombre portée sur le cercle:
Si nous modifions la classe widget de Button
, laissant tous les autres attributs comme-est, nous perdons de l'ombre portée sur le cercle:
Les questions:
-
Pourquoi le
android:elevation
comportement en train de changer? Il ne peut pas être due à l'arrière-plan, parce que c'est le même arrière-plan dans les deux cas. -
Les classes de soutien
android:elevation
, et qui ne le sont pas? Par exemple, à l'aide deTextView
au lieu deView
ouButton
nous donne encore l'ombre, de sorte que ce changement de comportement n'est pas présenté à laTextView
niveau, mais plutôt à laButton
niveau. -
Comme on le voit dans cette question d'hier, comment pouvons-nous obtenir
android:elevation
d'être à l'honneur sur unButton
? Est-il unandroid:allowElevationToWorkAsDocumented="true"
valeur que nous devons mettre dans un thème ou quelque chose?
- Intéressant question et les résultats, tout changement vous sera possible de partager le projet de test avec nous?
- Encore une fois, c'est le
ElevationBasic
de l'échantillon à partir de l'Android 5.0 échantillons, que vous pouvez télécharger à partir du SDK Manager. Je n'ai pas écrit l'échantillon, bien que j'ai modifié comme indiqué dans la question pourButton
test. - My bad, je l'ai lu un peu trop vite 😉
Vous devez vous connecter pour publier un commentaire.
Le Bouton "par défaut" de style de Matériel a un StateListAnimator qui contrôle la
android:elevation
etandroid:translationZ
propriétés. Vous pouvez supprimer l'animation existante ou définir votre propre en utilisant leandroid:stateListAnimator
propriété.La valeur par défaut de l'animateur est défini dans button_state_list_anim_material.xml. Voici un exemple montrant le permis et a pressé les états:
Dans mon expérience avec Appcompat v7 en cours d'exécution sur Lollipop appareil,
Button
travaille avec des fonctionnalités par défaut comme effet d'entraînement, de l'élévation et z-animation sur la souris, mais manque le si est un ensemble personnaliséandroid:background
propriété (comme la couleur ou le sélecteur) dans l'élément xml.appcompat-v7
. Merci, tout de même!C'est parce que vous êtes réglage de l'arrière-plan du bouton manuellement, ce qui permettra de remplacer tous ses effets.
Que de la version 23.0.0 libération de AppCompat, il y a un nouveau Widget.AppCompat.Bouton.Couleur style qui utilise votre thème colorButtonNormal pour les personnes handicapées de la couleur et de colorAccent pour le permis de couleurs.
Si vous voulez de différentes couleurs que spécifié vous pouvez créer un nouveau thème et l'appliquer à la touche par
android:theme
. Ensuite, vous pouvez utiliser ce thème sur tous vos boutons où vous voulez même effet.appcompat-v7
. Merci, tout de même!J'ai eu un problème similaire que j'ai pensé était due à tort gonflé mises en page, mais il semble que l'ajout de
clipToPadding
a fait le tour.Cela doit être défini à la mère
ViewGroup
contenant la vue que vous voulez projeter une ombre....
android:clipToPadding="false"
...
Cette solution fonctionne pour toutes les versions de l'API d'Android
Créer une ombre
@android:drawable/dialog_holo_light_frame
& si vous souhaitez personnaliser la couleur de l'arrière-plan au lieu de blanc, puis créer un calque arrière-plan liste avec personnalisable couleur sur le dessus de l'ombre comme indiqué ci-dessousDe la création d'un drawable fichier white_background_shadow.xml
et utiliser ce drawable que l'arrière-plan comme ceci