탐색 창-서랍 뒤에있는 항목에 대한 클릭 스루 비활성화
탐색 창을 조각의 콘텐츠 위에 유지하는 방법이 있습니까?
더미 데이터로 작은 테스트 애플리케이션을 만들었습니다. 해당 번호가 매겨진 버튼과 텍스트보기가있는 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();
}
'program story' 카테고리의 다른 글
WiX를 사용하여 CustomActionData를 CustomAction에 전달하는 방법은 무엇입니까? (0) | 2021.01.10 |
---|---|
.isin ( 'X')가 아닌 행 제거 (0) | 2021.01.10 |
Pandas / NumPy에서 열 / 변수가 숫자인지 여부를 확인하는 방법은 무엇입니까? (0) | 2021.01.10 |
자바 스크립트로 생성 된 테이블 위에 행 추가 (0) | 2021.01.09 |
RVM Ruby 1.9.1 설치는 zlib를 찾을 수 없지만 런타임 및 개발 라이브러리가 있습니다. (0) | 2021.01.09 |