program story

탐색 창-서랍 뒤에있는 항목에 대한 클릭 스루 비활성화

inputbox 2021. 1. 10. 17:12
반응형

탐색 창-서랍 뒤에있는 항목에 대한 클릭 스루 비활성화


탐색 창을 조각의 콘텐츠 위에 유지하는 방법이 있습니까?

더미 데이터로 작은 테스트 애플리케이션을 만들었습니다. 해당 번호가 매겨진 버튼과 텍스트보기가있는 10 개의 조각. 문제는 프래그먼트 요소가 탐색 창보다 우선 순위가 더 높은 것으로 보인다는 사실입니다.

여기에 이미지 설명 입력

스크린 샷에서 볼 수 있듯이 "0 조각"을 열려고하면 대신 탐색 창 뒤에있는 버튼 클릭을 등록하도록 선택합니다. 다른 콘텐츠 항목을 눌러도 잘 작동하지만 그 아래에 상호 작용할 수있는 다른 항목이없는 한 가능합니다. 탐색 창을 뒤에있는 콘텐츠 위에 제대로 유지하려면 어떻게해야합니까?


android:clickable="true"슬라이딩 창 레이아웃에 태그를 설정 합니다.


문제는 클릭 포커스 때문이 아닌 것 같습니다.

https://developer.android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout을 방문 하십시오.

XML 순서는 z 순서를 의미하고 드로어가 컨텐츠의 맨 위에 있어야하므로 기본 컨텐츠보기 (위의 FrameLayout)는 DrawerLayout의 첫 번째 하위 여야합니다.


프래그먼트 드로어에서 True를 반환하도록 TouchListener를 설정했습니다. 그것은 나를 위해 일했습니다

        mFragmentContainerView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });

나는 그것을 다른 방식으로 해결했다.

서랍을 설정하는 코드는 다음과 같습니다.

/**
 * Setup Navigation Drawer
 */
private void setDrawer() {
    NavigationDrawerFragment mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer);
    mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
}

setup메서드는 내 안에 NavigationDrawerFragment있으며 여기에 대한 코드가 있습니다.

/**
 * Users of this fragment must call this method to set up the navigation drawer interactions.
 *
 * @param fragmentId   The android:id of this fragment in its activity's layout.
 * @param drawerLayout The DrawerLayout containing this fragment's UI.
 * @param toolbar      The Toolbar of the activity.
 */
public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
    View mFragmentContainerView = (View) getActivity().findViewById(fragmentId).getParent();
    DrawerLayout mDrawerLayout = drawerLayout;

    //noinspection deprecation
    mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));

    ActionBarDrawerToggle mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, "Drawer opened", "Drawer closed") {
        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            if (!isAdded()) return;

            // Solution:
            // Disable click event on views below Navigation Drawer
            mFragmentContainerView.setClickable(false);
            getActivity().invalidateOptionsMenu();
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            if (!isAdded()) return;

            // Solution:
            // Enable click event on views below Navigation Drawer
            mFragmentContainerView.setClickable(true);
            getActivity().invalidateOptionsMenu();
        }
    };

    // Defer code dependent on restoration of previous instance state.
    mDrawerLayout.post(new Runnable() {
        @Override
        public void run() {
            mActionBarDrawerToggle.syncState();
        }
    });

    //noinspection deprecation
    mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
}

그게 다야


이 문제에 대한 해결책을 하나 찾았습니다. 서랍이 열릴 때 사용하는 레이아웃에서 bringToFront () 메서드를 호출하여 탐색 모음을 앞으로 가져올 수 있습니다. 이렇게하면 새 항목이 선택 될 때까지 탐색 창이 기본 콘텐츠 위에 유지됩니다.

즉 :

@Override
public void onDrawerOpened(View drawerView)
   {
   activity.getActionBar().setTitle("Select content");
   activity.invalidateOptionsMenu();
   drawerLayout.bringToFront();
   }

참조 URL : https://stackoverflow.com/questions/17498478/navigation-drawer-disable-click-through-on-items-behind-the-drawer

반응형