Estou tentando adicionar um ProgressBar
em cima de um Button
(ambos estão dentro de um 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"/>
Mas mesmo depois de chamar bringToFront
o ProgressBar
in onCreate
, ele sempre fica atrás do Button
.
ProgressBar progressBar = (ProgressBar)findViewById(R.id.progressBar);
progressBar.bringToFront();
android
android-layout
android-constraintlayout
Adam Johns
fonte
fonte
Respostas:
Defina uma elevação no
ProgressBar
;2dp
parece funcionar.Você também pode tentar definir
translationZ
conforme sugerido na resposta aceita a uma pergunta semelhante .Também encontrei esta resposta como alternativa.
fonte
elevation
etranslationZ
são apenas para API> = 21, e as APIs mais antigas?ViewCompat.setTranslationZ(view, 5)
ViewCompat.setElavation(view, 20f)
ajuda vocêPrecisamos usar android: elevation para controlar isso.
Este atributo de elevação só funciona no nível de API> = 21. Mas abaixo disso ele se comportará normalmente. Se adicionarmos Progress abaixo da visualização do botão, ele mostrará a visualização que está na parte inferior na parte superior da outra visualização.
fonte
Na maioria dos casos, você pode simplesmente definir a exibição que deseja no topo, depois daquela que deve aparecer abaixo dela.
fonte
ProgressBar
não está no topoButton
, emboraProgressBar
seja definido depoisButton
na pergunta.No layout de restrição, você deve usar
tradução
mais alto do que a visualização que você deseja abaixo.
fonte
Resposta atualizada para Android Sutdio 3.5:
No Layout Editor atualizado, agora é muito mais fácil escolher qual View estará na frente, conforme demonstrado nas notas de lançamento do Android Studio
https://developer.android.com/studio/releases
Ainda mais fácil, se você arrastar a Visualização para cima (copiar, colar ou da Árvore de Componentes no editor de layout), ela terá prioridade menor (por isso ficará atrás das outras visualizações)
fonte
Você pode envolvê-lo como a seguir. Use framelayout como pai e coloque a barra porogress fora do layout de restrição. Isso vai se sobrepor ao botão
fonte
O botão por padrão tem TranslationZ definido, então você tem duas opções
1 - tornar a barra de progresso TranslationZ maior que a elevação do botão
2 - faça com que o botão TranslateZ seja 0 para que as visualizações apareçam acima umas das outras em ordem no seu Layout de restrição, você pode conseguir isso configurando o estilo para o botão
fonte
Embora
android:elevation="4dp"
outraslationz
funcione, mas para esse nível de API deve ser pelo menos 21. Se por algum motivo você não puder fazer isso, certifique-se de que a exibição desejada no topo seja mencionada após as outras exibições. Por exemplo, se eu quiser progressBar sobre ImageView:fonte