J'essaie d'ajouter un ProgressBar
au-dessus d'un Button
(les deux sont à l'intérieur de a ConstraintLayout
).
<Button
android:id="@+id/sign_in_button"
android:layout_width="280dp"
android:layout_height="75dp"
android:layout_marginBottom="75dp"
android:layout_marginTop="50dp"
android:text="@string/sign_in"
android:textColor="@color/white"
android:textSize="22sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/passwordEditText"
app:layout_constraintVertical_bias="0.0"/>
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@+id/sign_in_button"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="@+id/sign_in_button"
android:layout_marginBottom="8dp"
app:layout_constraintVertical_bias="0.5"
android:layout_marginLeft="8dp"
app:layout_constraintLeft_toLeftOf="@+id/sign_in_button"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="@+id/sign_in_button"/>
Mais même après avoir appelé bringToFront
le ProgressBar
in onCreate
, il reste toujours derrière le Button
.
ProgressBar progressBar = (ProgressBar)findViewById(R.id.progressBar);
progressBar.bringToFront();
android
android-layout
android-constraintlayout
Adam Johns
la source
la source
Réponses:
Définissez une élévation sur le
ProgressBar
;2dp
semble fonctionner.Vous pouvez également essayer de définir
translationZ
comme suggéré dans la réponse acceptée à une question similaire .Je suis également tombé sur cette réponse comme alternative.
la source
elevation
ettranslationZ
ne sont que pour les API> = 21, qu'en est-il des API plus anciennes?ViewCompat.setTranslationZ(view, 5)
ViewCompat.setElavation(view, 20f)
vous aideNous devons utiliser android: elevation pour contrôler cela.
Cet attribut d'élévation ne fonctionne qu'au niveau API> = 21. Mais en dessous, il se comportera normalement. Si nous ajoutons Progression sous la vue Button, cela montre la vue qui se trouve en bas en haut de l'autre vue.
la source
Dans la plupart des cas, vous pouvez simplement définir la vue que vous voulez en haut après celle qui devrait apparaître en dessous.
la source
ProgressBar
n'est pas au-dessus duButton
même siProgressBar
est défini aprèsButton
dans la question.Dans la mise en page Contrainte, vous devez utiliser
traslationz
plus haut que la vue que vous souhaitez ci-dessous.
la source
Réponse mise à jour pour Android Sutdio 3.5:
Dans l'éditeur de mise en page mis à jour, il est maintenant beaucoup plus facile de choisir la vue qui sera devant, comme indiqué dans les notes de publication d'Android Studio.
https://developer.android.com/studio/releases
Encore plus facile, si vous faites glisser la vue vers le haut (copier-coller ou depuis l'arborescence des composants dans l'éditeur de mise en page), elle aura une priorité inférieure (elle sera donc derrière les autres vues)
la source
Vous pouvez l'envelopper comme ci-dessous Utilisez framelayout comme parent et mettez la barre porogress en dehors de la disposition des contraintes. Cela va chevaucher le bouton
la source
Le bouton par défaut a TranslationZ défini, vous avez donc deux options
1 - Rendre la barre de progression TranslationZ supérieure à l'élévation du bouton
2 - Faites le bouton TranslateZ à 0 pour que les vues apparaissent les unes au-dessus des autres dans l'ordre dans votre mise en page de contraintes, vous pouvez y parvenir en définissant le bouton Style sur
la source
Bien que
android:elevation="4dp"
outraslationz
fonctionnera, mais pour ce niveau d'API devrait au moins 21. Si pour une raison quelconque vous ne pouvez pas faire cela, assurez-vous que la vue que vous voulez en haut est mentionnée après les autres vues. Par exemple, si je veux progressBar par-dessus ImageView:la source