Android ConstraintLayout - 将一个视图放在另一个视图的顶部

Ada*_*hns 85 android android-layout android-constraintlayout

我想添加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"/>
Run Code Online (Sandbox Code Playgroud)

但即使在呼吁bringToFront进入ProgressBaronCreate,它总是留在后面Button.

ProgressBar progressBar = (ProgressBar)findViewById(R.id.progressBar);
progressBar.bringToFront();
Run Code Online (Sandbox Code Playgroud)

Che*_*amp 129

设置一个标高ProgressBar; 2dp似乎工作.

android:elevation="2dp"
Run Code Online (Sandbox Code Playgroud)

您也可以尝试translationZ按照类似问题的接受答案中的建议进行设置.

作为另一种选择,我也遇到了这个答案.

  • 但是`elevation`和`translationZ`仅适用于API> = 21,那么旧的API呢? (14认同)
  • @ q126y`ViewCompat.setTranslationZ(view,5)` (4认同)
  • `ViewCompat.setElavation(view, 20f)` 帮助你 (3认同)

Cri*_*tan 10

您可以简单地在应该出现在其下方的视图之后定义您想要的视图。

对于按钮,请注意它们的高度由它们的 stateListAnimator 控制。stateListAnimator 的Widget.MaterialComponents.Button默认高度为@dimen/mtrl_btn_elevation(2dp)。因此,如果您想在 Button 顶部显示视图,它的高度至少应为 2dp。


小智 6

在约束布局中,您应该使用

翻译

高于您想要低于的视图。


Ish*_*ndo 5

我们需要使用android:elevation来控制它。

android:elevation="10dp"
Run Code Online (Sandbox Code Playgroud)

此海拔高度属性仅在API级别> 21时起作用。但在此之下它将正常运行。如果将“进度”添加到“按钮”视图下方,则会在另一个视图顶部的底部显示该视图。


Abh*_*bhi 5

虽然android:elevation="4dp"traslationz可以工作,但该 API 级别至少应为 21。如果由于某种原因您无法做到这一点,请确保您想要的视图在其他视图之后被提及。例如,如果我希望进度条位于 ImageView 之上:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".ImageActivity">

<ImageView
   android:id="@+id/image_view"
   android:layout_width="0dp"
   android:layout_height="0dp"
   app:layout_constraintBottom_toBottomOf="parent"
   app:layout_constraintDimensionRatio="6:4"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintStart_toStartOf="parent"
   app:layout_constraintTop_toTopOf="parent" />

<ProgressBar
   android:id="@+id/progress_bar"
   style="?android:attr/progressBarStyle"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   app:layout_constraintBottom_toBottomOf="parent"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintStart_toStartOf="parent"
   app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)