Android ConstraintLayout-하나의 뷰를 다른 뷰 위에 놓기


105

나는 ProgressBar위에 a를 추가하려고 합니다 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"/>

그러나 심지어 호출 한 후 bringToFrontProgressBaronCreate뒤에서, 그것은 항상 숙박을 Button.

ProgressBar progressBar = (ProgressBar)findViewById(R.id.progressBar);
progressBar.bringToFront();

이것은 너무 이상합니다. 진행률 표시 줄이 편집 텍스트에 제한되고 버튼이 진행률 표시 줄에 제한되도록 체인을 뒤집어도 레이아웃으로 약간 재생하려고했지만 버튼이 항상 진행률 표시 줄 위에있는 것처럼 보입니다.
lelloman

FrameLayout을 사용할 수 있습니까? 한번 시도해보세요. FrameLayout에서 Z- 색인은 레이아웃 내부의 순서로 제공됩니다 (따라서 Button 1st, Progress 2nd)
razgraf

내가 app : layout_constraintTop_toBottomOf = "@ + id / passwordEditText"없이 확인했을 때 passwordEditText는 어디에 있습니까? 상단에 진행률 표시 줄이 표시됩니다. passwordEditText를 제공 할 수
Pavan

답변:


167

에 고도를 설정합니다 ProgressBar. 2dp작동하는 것 같습니다.

android:elevation="2dp"

유사한 질문translationZ 에 대한 수락 된 답변에서 제안 된대로 설정 을 시도 할 수도 있습니다 .

나는 또한 대안 으로이 대답 을 보았습니다.


17
그러나 elevationtranslationZ전용 API> = 21, 어떤 오래된 API에 대한 위해인가?
q126y

1
@ q126y API 21까지는 이것이 문제가되지 않았다고 생각하므로 이전 API에는이 기능이 필요하지 않습니다. API 17을 실행하는 에뮬레이터에서 시도했는데 진행률 표시 줄이 예상대로 맨 위에 나타납니다.
Cheticamp

@ Cheticamp 그래서 이것을 처리하는 방법? AS는 API 레벨 21 이상에서만 작동한다는 경고를 표시합니다.
Ajay S

6
@ q126yViewCompat.setTranslationZ(view, 5)
실비아 H

2
ViewCompat.setElavation(view, 20f)당신이하는 데 도움이
sagus_helgy

9

이를 제어하려면 android : elevation을 사용해야합니다.

android:elevation="10dp"

이 고도 속성은 API 레벨> = 21에서만 작동합니다.하지만 그 이하에서는 정상적으로 작동합니다. Button 뷰 아래에 Progress를 추가하면 다른 뷰의 맨 아래에있는 뷰가 표시됩니다.


6

대부분의 경우 아래에 표시되어야하는 뷰 다음에 상단에 원하는 뷰를 정의 할 수 있습니다.


coz XML이 실수로 재정렬 될 수 있는지 확인하는 방법
RamPrasadBismil

@Cristan, 코드 스 니펫 또는 예제를 제공하는 것이 좋습니다. 감사합니다
blueware

1
왜 궁금해 ProgressBar의 상단에없는 Button하더라도 ProgressBar이후에 정의 된 Button질문입니다.
Michael Osofsky

나는이 너무 사실이라고 생각하지만 제약 레이아웃 순서에 이미지 뷰를 배치 상관없이, 항상 버튼 뒤에 나타나고있다
behelit

1

Constraint 레이아웃에서는 다음을 사용해야합니다.

Traslationz

아래에서 원하는보기보다 높습니다.


0

Android Sutdio 3.5에 대한 업데이트 된 답변 :

업데이트 된 Layout Editor에서 이제 Android Studio 출시 노트에 설명 된대로 앞에 표시 할 뷰를 선택하는 것이 훨씬 쉬워졌습니다.

.. 또한 파란색 오버레이가 이제 제약 조건의 대상을 강조 표시합니다. 이 강조 표시는 다른 구성 요소와 겹치는 구성 요소로 제한하려고 할 때 특히 유용합니다.

https://developer.android.com/studio/releases

더 쉽게, 뷰를 위로 드래그하면 (복사 붙여 넣기 또는 레이아웃 편집기의 컴포넌트 트리에서) 우선 순위가 낮아집니다 (따라서 다른 뷰보다 뒤에있게됩니다).


0

아래와 같이 래핑 할 수 있습니다. 겹치는 버튼

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
 //your all view inside it with button
 <Button/>......
  .........
 </androidx.constraintlayout.widget.ConstraintLayout>

 <ProgressBar
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</FrameLayout>

0

기본적으로 버튼에는 TranslationZ가 설정되어 있으므로 두 가지 옵션이 있습니다.

1-진행률 표시 줄 TranslationZ를 버튼 고도보다 크게 만듭니다.

ViewCompat.setTranslationZ(progressBar, 5)// to support older api <21

2-버튼 TranslateZ를 0으로 설정하여 뷰가 Constraint Layout에서 순서대로 서로 위에 나타나도록합니다. Style을 button으로 설정하여이 작업을 수행 할 수 있습니다.

style="@style/Widget.AppCompat.Button.Borderless"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.