Android élévation ne montrant pas d'ombre sur le Bouton
Ne pouvez pas obtenir bouton d'ombres pour se manifester.
Dépouillé mon code pour l'exemple minimal:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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">
<LinearLayout
android:id="@+id/main_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp">
<Button
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginLeft="20dp"
android:elevation="10dp"
android:translationZ="10dp"
android:background="@android:color/holo_green_light"
android:text="BUTTON"/>
</RelativeLayout>
</LinearLayout>
</ScrollView>
J'ai besoin que de la structure de mise.
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Ombre est visible dans Android Studio designer:
Mais n'apparaît pas lors de l'exécution:
Testé sur:
- Genymotion Google Nexus 5X - Guimauve 6.0.0 - API 23
- Genymotion Google Nexus 5 - Sucette 5.1.0 - API 22
- Genymotion Samsung Galaxy S2 - Jelly Bean 4.1.1 - API 16
- Périphérique matériel, Samsung Galaxy S5 mini - KitKat 4.4.2 - API 19
Tous même résultat.
Je suis en utilisant:
- Android Studio 2.1.2
- minSdkVersion 16
- targetSdkVersion 24
Merci de créer un nouveau projet dans Andriod Studio, Vide Activité de modèle, puis copiez et collez ce code dans activity_main.xml
et MainActivity.java
de sorte que vous pouvez tester et me dire.
- Directement ajouter votre touche pour le ScrollView et voir si sa montrant l'ombre ou pas. Elle peut être due à Linéaire et RelativeLayout qui est de l'emballage . Suivez ce lien pour référence stackoverflow.com/questions/35289356/...
- Il n'y a pas de telle propriété
layout_topLeft
pour toutView
..!! - oui Vous avez raison, et aussi dans la conception de Matériel
android:elevation="2dp"
etandroid:translationZ="2dp"
est que le travail lorsque vous définissezandroid:stateListAnimator="@null"
sinon c'est prendre le défaut de la propriété. - Oui, il y avait une erreur dans l'exemple de code, pas de layout_topLeft. Édité. Encore de vérifier. Merci!
Vous devez vous connecter pour publier un commentaire.
copié à partir d'ici
il suffit d'ajouter ce bien à votre
Button
. vous pouvez définir votre propre en utilisant leandroid:stateListAnimator
propriété.code complet :
Mise à jour :
pour la Compréhension je l'ai mis 10dp..
code xml :
J'ai été jouer avec les ombres sur Lollipop pour un peu, et c'est ce que j'ai trouvé:
Il apparaît que l'un des parents ViewGroup de limites de coupure, l'ombre de ses enfants pour une raison et une ombre avec
android:elevation
sont de coupure par le de la Vue de limites, de ne pas les limites prolongé jusqu'à la marge;Le droit chemin afin d'obtenir un enfant en vue de montrer l'ombre est de padding sur le parent et set
android:clipToPadding=false
sur que parent.Voici ma suggestion pour vous en fonction de ce que je connais:
Ensemble de votre haut niveau RelativeLayout pour avoir de remplissage égal à la marge que vous avez mis sur la relative mise en page que vous voulez afficher l'ombre;
Set
android:clipToPadding=false
sur le même RelativeLayout;Supprimer la marge de la RelativeLayout qui a aussi l'élévation de l'ensemble.
À la fin de la journée, votre haut-niveau relatif de la mise en page devrait ressembler à ceci:
L'intérieur relatif de la mise en page devrait ressembler à ceci:
De travailler dans mon cas, lui Donner un essai
app:elevation
stateListAnimator
remplaceelevation
dans les deux espaces. J'ai écrit le commentaire précédent pressé