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
'source' 카테고리의 다른 글
스택 포인터 값 출력 (0) | 2023.10.18 |
---|---|
Windows에서 MySQL Workbench가 열리지 않음 (0) | 2023.10.08 |
파워셸 ISE에서 런스페이스를 재설정할 수 있습니까? (0) | 2023.10.08 |
파워셸을 사용하여 계정에 "서비스로 로그온"을 부여하려면 어떻게 해야 합니까? (0) | 2023.10.08 |
Ordered Dict를 생성자를 사용하여 초기 데이터의 순서를 유지하도록 초기화하는 올바른 방법은 무엇입니까? (0) | 2023.10.08 |