Próbuję dodać ProgressBar
na górze a Button
(oba znajdują się wewnątrz 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"/>
Ale nawet po wywołaniu bringToFront
na ProgressBar
IN onCreate
, to zawsze pozostaje tył Button
.
ProgressBar progressBar = (ProgressBar)findViewById(R.id.progressBar);
progressBar.bringToFront();
android
android-layout
android-constraintlayout
Adam Johns
źródło
źródło
Odpowiedzi:
Ustaw elewację na
ProgressBar
;2dp
wydaje się działać.Możesz także spróbować ustawić
translationZ
zgodnie z przyjętą odpowiedzią na podobne pytanie .Trafiłem też na tę odpowiedź jako alternatywę.
źródło
elevation
itranslationZ
są tylko dla API> = 21, co ze starszymi interfejsami API?ViewCompat.setTranslationZ(view, 5)
ViewCompat.setElavation(view, 20f)
pomagaMusimy użyć android: elevation, aby to kontrolować.
Ten atrybut podniesienia uprawnień działa tylko na poziomie API> = 21. Ale poniżej będzie działał normalnie. Jeśli dodamy Progress poniżej widoku przycisku, pokaże się widok, który znajduje się na dole u góry drugiego widoku.
źródło
W większości przypadków możesz po prostu zdefiniować widok, który chcesz umieścić na górze, po tym, który powinien pojawić się poniżej.
źródło
ProgressBar
nie jest na szczycie,Button
mimo żeProgressBar
jest zdefiniowaneButton
w pytaniu.W układzie Constraint należy użyć
traslationz
wyżej niż widok, który chcesz poniżej.
źródło
Zaktualizowana odpowiedź dla Androida Sutdio 3.5:
W zaktualizowanym Edytorze układów znacznie łatwiej jest wybrać, który widok będzie z przodu, jak pokazano w informacjach o wersji Android Studio
https://developer.android.com/studio/releases
Jeszcze łatwiej, jeśli przeciągniesz widok w górę (skopiuj wklej lub z drzewa komponentów w edytorze układu), otrzyma on niższy priorytet (więc będzie znajdował się za innymi widokami)
źródło
Możesz zawinąć jak poniżej Użyj framelayout jako rodzica i umieść pasek porogress poza układem ograniczeń. Ten przycisk będzie się nakładał
źródło
Przycisk domyślnie ma ustawioną opcję TranslationZ, więc masz dwie opcje
1 - spraw, aby pasek postępu TranslationZ był większy niż wysokość przycisku
2 - ustaw przycisk Przekształć w Z na 0, aby widoki pojawiały się nad sobą w porządku w układzie ograniczeń, możesz to osiągnąć, ustawiając styl na przycisk
źródło
Chociaż
android:elevation="4dp"
lubtraslationz
będzie działać, ale dla tego poziomu API powinien wynosić co najmniej 21. Jeśli z jakiegoś powodu nie możesz tego zrobić, upewnij się, że widok, który chcesz na górze, jest wymieniony po innych widokach. Na przykład, jeśli chcę, aby progressBar znajdowała się na górze ImageView:źródło