Я пытаюсь добавить ProgressBar
поверх Button
(оба внутри 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"/>
Но даже после вызова bringToFront
на ProgressBar
ин onCreate
, оно всегда остается позади Button
.
ProgressBar progressBar = (ProgressBar)findViewById(R.id.progressBar);
progressBar.bringToFront();
android
android-layout
android-constraintlayout
Адам Джонс
источник
источник
Ответы:
Установите высоту на
ProgressBar
;2dp
вроде работает.Вы также можете попробовать установить,
translationZ
как это предлагается в принятом ответе на аналогичный вопрос .Я также встретил этот ответ как альтернативу.
источник
elevation
иtranslationZ
только для API> = 21, а как насчет более старых API?ViewCompat.setTranslationZ(view, 5)
ViewCompat.setElavation(view, 20f)
помогает вамНам нужно использовать android: elevation, чтобы управлять этим.
Этот атрибут высоты работает только на уровне API> = 21. Но на более низком уровне он будет вести себя нормально. Если мы добавим Progress под представлением Button, оно покажет представление, которое находится внизу вверху другого представления.
источник
В большинстве случаев вы можете просто определить представление, которое хотите расположить вверху, после того, которое должно появиться под ним.
источник
ProgressBar
не на вершине,Button
хотяProgressBar
определяется послеButton
в вопросе.В макете ограничений вы должны использовать
traslationz
выше, чем вид, который вы хотите ниже.
источник
Обновленный ответ для Android Sutdio 3.5:
В обновленном редакторе макетов теперь намного проще выбрать, какой вид будет впереди, как показано в примечаниях к выпуску Android Studio.
https://developer.android.com/studio/releases
Еще проще, если вы перетащите представление вверх (скопируйте и вставьте из дерева компонентов в редакторе макета), он получит более низкий приоритет (поэтому он будет позади других представлений)
источник
Вы можете обернуть его, как показано ниже. Используйте framelayout как родительский и поместите панель porogress за пределы макета ограничений. Это будет кнопка перекрытия
источник
По умолчанию для кнопки установлен TranslationZ, поэтому у вас есть два варианта
1 - сделать индикатор выполнения TranslationZ больше, чем высота кнопки
2 - установите для кнопки TranslateZ значение 0, чтобы представления отображались друг над другом в определенном порядке в вашем макете ограничений, вы можете добиться этого, установив стиль на кнопку
источник
Хотя
android:elevation="4dp"
илиtraslationz
будет работать, но для этого уровня API должно быть не менее 21. Если по какой-то причине вы не можете этого сделать, убедитесь, что вид, который вы хотите, вверху упоминается после других представлений. Например, если я хочу, чтобы прогрессБар был поверх ImageView:источник