Programing

다른 조각 문제에 대한 조각

lottogame 2020. 4. 3. 08:11
반응형

다른 조각 문제에 대한 조각


하나의 조각 ( #77000000배경 이있는 전체 화면 )을 다른 조각 (메인이라고 함) 위에 표시 할 때 메인 조각은 여전히 ​​클릭에 반응합니다 (보이지 않아도 버튼을 클릭 할 수 있음).

질문 : 첫 번째 (주) 조각에서 클릭을 방지하는 방법은 무엇입니까?

편집하다

불행히도, 두 번째 조각에 투명한 배경을 사용하기 때문에 주요 조각을 숨길 수 없습니다 (따라서 사용자는 뒤에있는 것을 볼 수 있습니다).


설정 clickabletrue로 두 번째 조각의 뷰 속성입니다. 뷰는 이벤트를 잡아서 주요 조각으로 전달되지 않습니다. 따라서 두 번째 조각의 뷰가 레이아웃이면 다음 코드가됩니다.

<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

반응형