다른 조각 문제에 대한 조각
하나의 조각 ( #77000000
배경 이있는 전체 화면 )을 다른 조각 (메인이라고 함) 위에 표시 할 때 메인 조각은 여전히 클릭에 반응합니다 (보이지 않아도 버튼을 클릭 할 수 있음).
질문 : 첫 번째 (주) 조각에서 클릭을 방지하는 방법은 무엇입니까?
편집하다
불행히도, 두 번째 조각에 투명한 배경을 사용하기 때문에 주요 조각을 숨길 수 없습니다 (따라서 사용자는 뒤에있는 것을 볼 수 있습니다).
설정 clickable
true로 두 번째 조각의 뷰 속성입니다. 뷰는 이벤트를 잡아서 주요 조각으로 전달되지 않습니다. 따라서 두 번째 조각의 뷰가 레이아웃이면 다음 코드가됩니다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
해결책은 매우 간단합니다. 두 번째 조각 (주 조각과 겹침)에서 onTouch
이벤트 를 포착하면됩니다 .
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstance){
View root = somehowCreateView();
/*here is an implementation*/
root.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
return root;
}
부모 레이아웃에 추가 clickable="true"
하고focusable="true"
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true">
<!--Your views-->
</android.support.constraint.ConstraintLayout>
를 사용하는 경우 AndroidX
이것을 시도하십시오
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true">
<!--Your views-->
</androidx.constraintlayout.widget.ConstraintLayout>
두 개의 프래그먼트가 동일한 컨테이너보기에 배치 된 경우 두 번째 프래그먼트를 표시 할 때 첫 번째 프래그먼트를 숨겨야합니다.
Fragment에 대한 문제를 해결하는 방법에 대한 자세한 내용을 보려면 내 라이브러리를 참조하십시오 : https://github.com/JustKiddingBaby/FragmentRigger
FirstFragment firstfragment;
SecondFragment secondFragment;
FragmentManager fm;
FragmentTransaction ft=fm.beginTransaction();
ft.hide(firstfragment);
ft.show(secondFragment);
ft.commit();
당신은 android:focusable="true"
함께 추가해야합니다android:clickable="true"
Clickable
즉, 포인터 장치로 클릭하거나 터치 장치로 탭할 수 있습니다.
Focusable
키보드와 같은 입력 장치에서 포커스를 얻을 수 있음을 의미합니다. 키보드와 같은 입력 장치는 입력 자체를 기반으로 입력 이벤트를 보낼 뷰를 결정할 수 없으므로 포커스가있는 뷰로 보냅니다.
당신이 할 수있는 일은 onClick 속성을 사용하여 해당 주요 조각의 부모 레이아웃에 빈 조각 클릭을 줄 수 있으며 활동 중에는 함수를 만들고 doNothing(View view)
아무것도 쓰지 않을 수 있습니다 . 이것은 당신을 위해 그것을 할 것입니다.
DialogFragment의 경우처럼 들립니다. 그렇지 않으면 Fragment Manager를 사용하여 하나는 숨기고 다른 하나는 표시합니다. 그것은 나를 위해 일했다.
추가가 효과 android:clickable="true"
가 없었습니다. 이 솔루션은 부모 레이아웃 인 CoordinatorLayout에서 작동하지 않습니다. 그렇기 때문에 RelativeLayout을 부모 레이아웃으로 만들어 추가 android:clickable="true"
하고이 RelativeLayout에 CoordinatorLayout을 배치했습니다.
허용되는 답변은 "작동"하지만 하단의 조각이 여전히 그려지고 있으므로 성능 비용 (재 인출, 방향 변경에 대한 재 측정)이 발생할 수도 있습니다. 어쩌면 태그 또는 ID로 조각을 찾아서 다시 표시해야 할 때 가시성을 GONE 또는 VISIBLE로 설정해야 할 수도 있습니다.
코 틀린에서 :
fragmentManager.findFragmentByTag(BottomFragment.TAG).view.visibility = GONE
이 솔루션은 애니메이션을 사용할 때 의 대안 hide()
및 show()
방법 보다 선호됩니다 FragmentTransaction
. 당신은 방금에서 호출 onTransitionStart()
및 onTransitionEnd()
의 Transition.TransitionListener
.
동일한 XML을 가진 여러 조각이 있습니다.
시간을 보낸 후에 나는 제거 setPageTransformer
하고 일하기 시작했다.
// viewpager.setPageTransformer(false, new BackgPageTransformer())
나는 논리를 부딪쳤다.
public class BackgPageTransformer extends BaseTransformer {
private static final float MIN_SCALE = 0.75f;
@Override
protected void onTransform(View view, float position) {
//view.setScaleX Y
}
@Override
protected boolean isPagingEnabled() {
return true;
}
}
참고 URL : https://stackoverflow.com/questions/10389620/fragment-over-another-fragment-issue
'Programing' 카테고리의 다른 글
"확장 구성으로 인해 요청한 페이지를 제공 할 수 없습니다." (0) | 2020.04.03 |
---|---|
조건식이있는 AngularJS ng 스타일 (0) | 2020.04.03 |
Amazon Cloud Server에서 FTP 설정 (0) | 2020.04.03 |
데이터베이스에서보기를 작성하는 이유는 무엇입니까? (0) | 2020.04.03 |
문자열로 파일을 읽는 가장 간단한 방법은 무엇입니까? (0) | 2020.04.03 |