source

Android에서 상대 레이아웃의 Z 순서 보기 정의

manycodes 2023. 10. 8. 10:01
반응형

Android에서 상대 레이아웃의 Z 순서 보기 정의

안드로이드에서 상대 배치 뷰의 z 순서를 정의하고자 합니다.

그 방법 중 하나가 전화하는 거라는 것을 압니다.bringToFront.

더 좋은 방법이 없을까요?레이아웃 xml에 z 순서를 정의할 수 있으면 좋겠습니다.

가장 쉬운 방법은 보기가 XML 파일에 추가되는 순서에 주의하는 것입니다.파일의 아래쪽은 Z축의 위쪽이 높다는 것을 의미합니다.

편집: 이것은 안드로이드 개발자 사이트에 여기저기 기록되어 있습니다.(고맙습니다 @flightplanner)

이것을 코드로 하고 싶다면 당신은 할 수 있습니다.

View.bringToFront();

문서 참조

API 21 이상의 버튼 및 기타 요소는 고도가 높으므로 상위 레이아웃에 관계없이 요소의 xml 순서를 무시합니다.그걸 알아내는데 시간이 좀 걸렸습니다.

API 레벨 21부터 시작하는 Android에서 레이아웃 파일의 항목은 정답에서 설명된 것처럼 파일 내에서 순서가 정렬되는 방식으로 Z 순서를 얻으며, 고도 값이 높을수록 항목의 Z 순서가 높다는 것을 의미합니다.

이로 인해 종종 문제가 발생할 수 있으며, 특히 XML 순서에 따라 Z 순서로 아래에 있어야 하는 항목 위에 나타나는 버튼의 경우 더욱 그렇습니다.이 문제를 해결하려면 다음을 설정만 하면 됩니다.android:elevation달성하고자 하는 Z 순서와 일치하도록 레이아웃 XML에 있는 항목을 선택합니다.

레이아웃에서 요소의 표고를 설정하면 그림자가 드리워지기 시작합니다.이 효과를 원하지 않을 경우 다음과 같은 코드로 그림자를 제거할 수 있습니다.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   myView.setOutlineProvider(null);
}

레이아웃 xml을 통해 높은 뷰의 음영을 제거할 방법을 찾지 못했습니다.

동일한 문제가 발생했습니다.상대적인 레이아웃 parentView에서 저는 childView1과 childView2 두 자녀가 있습니다.처음에는 childView1을 childView2 위에 놓고 childView1을 childView2 위에 올려놓습니다.아이들의 시선 순서를 바꾼다고 문제가 해결된 것은 아닙니다.parentView와 내가 설정한 코드에서 Android:clipChildren="false"를 설정하는 것이 효과적이었습니다.

childView1.bringToFront();

parentView.invalidate();

사용할 수 있으니 참고하시기 바랍니다.view.setZ(float)API 레벨 21부터 시작합니다.자세한 정보는 여기에서 확인할 수 있습니다.

소개할 때부터 답을 추가해야겠다고 생각했습니다.

안드로이드:번역Z

XML 필드가 상황을 조금 바꿨습니다.다른 대답들은 달리기를 제안합니다.

childView1.bringToFront();

parentView.invalidate();

이 코드가 XML 파일에 하드코딩된 Android:translationZ가 있는 어떤 뷰 앞에도 childView1을 가져오지 않는다는 것을 제외하고는 완전히 정확합니다.이 문제로 문제가 있었는데, 다른 보기에서 이 필드를 제거한 후에는 bring To Front()가 제대로 작동했습니다.

에는 API 21 가 .view.setElevation(float)

사용하다ViewCompat.setElevation(view, float);

ViewCompat.setZ(v, pixels)그리고.ViewCompat.setTranslationZ(v, pixels)

할 수 있습니다.addView상대 합니다.

childView.bringToFront()가 작동하지 않아 가장 최근에 추가된 항목(다른 모든 하위 항목을 오버레이하고 있던 항목)의 Z 변환을 다음과 같이 음의 값으로 설정했습니다.

lastView.setTranslationZ(-10);

자세한 내용은 https://developer.android.com/reference/android/view/View.html#setTranslationZ(float) 을 참조하십시오.

또는 프레임 레이아웃 안에 겹쳐진 버튼이나 보기를 넣으십시오.그러면 xml 파일의 RelativeLayout은 추가된 자식 레이아웃의 순서를 존중합니다.

사용 RelativeLayout

protected int getChildDrawingOrder (int childCount, int i)

메서드는 매개 변수 하십시오를 이 메서드는 매개 변수를 사용합니다.i"요?"요?i'th. .ViewPager합니다와 합니다. 사용자 지정 도면 순서를 설정합니다.PageTransformer.

XML의 보기 중 하나에 표고가 있는지 확인합니다. 그런 경우 다른 항목에 표고를 추가하거나 표고를 제거하여 문제를 해결합니다.거기서부터 무엇이 다른 쪽보다 위에 있는지를 지시하는 것은 견해의 순서입니다.

아래 코드 샘플을 사용하여 동일한 작업을 수행할 수 있습니다.

ViewCompat.setElevation(sourceView, ViewCompat.getElevation(mCardView)+1);

이것은 하위 호환성이 있습니다.여기서mCardView입니다 입니다.sourceView.

언급URL : https://stackoverflow.com/questions/2614393/defining-z-order-of-views-of-relativelayout-in-android

반응형