2

버튼의 onClick에서 DrawerLayout의 상태를 토글하고 해당 슬쩍을 비활성화합니다. 괜찮 으면 작동하지만 방향이 바뀌면 서랍은 상태를 유지하지 않습니다. 열린 경우이 닫힙니다. android:configChanges="keyboardHidden|orientation"을 추가하는 경우에도 발생합니다. 내 활동에DrawerLayout이 방향 변경시 상태를 잃습니다.

코드 :

private DrawerLayout drawer; 
private int drawerLayoutGravity = Gravity.RIGHT; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    disableDrawer(); 

    View btnOpenDrawer = findViewById(R.id.btn_open_drawer); 
    btnOpenDrawer.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      toggleDrawerState(); 
     } 
    }); 
} 

private void toggleDrawerState() { 
    if (drawer.isDrawerOpen(drawerLayoutGravity)) { 
     drawer.closeDrawer(drawerLayoutGravity); 
    } else { 
     drawer.openDrawer(drawerLayoutGravity); 
    } 
} 

/** 
* doesn't let the user swipe to open the drawer 
*/ 
private void disableDrawer() { 
    drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
} 

가능한 솔루션은 내가 활동의 onConfigurationChanged에 DrawerLayout를 다시 열,하지만 구성이을 변경할 때 DrawerLayout 재 개방을 보여주는 피할 필요가 있다는 것입니다.

답변

3

스 와이프를 사용 중지하려면 서랍에 닫힌 잠금 모드를 설정하고 있습니다. Activity 재생성을 사용 중지해도 오리엔테이션 변경은 View에서 레이아웃 이벤트를 트리거하고, DrawerLayout은 자체 배치시 잠금 모드에 따라 서랍 상태를 설정합니다.

프로그래밍 방식으로 서랍을 열거 나 닫을 때마다 잠금 모드를 업데이트해야합니다. 당신이 말을하는 것은 의미가 않지만 나는`사용하고 있기 때문에

private void toggleDrawerState() { 
    if (drawer.isDrawerOpen(drawerLayoutGravity)) { 
     drawer.closeDrawer(drawerLayoutGravity); 
     drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
    } else { 
     drawer.openDrawer(drawerLayoutGravity); 
     drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN); 
    } 
} 
+0

이,이 경우는 문제가되지 않을한다 : configChanges = "keyboardHidden | 방향을"', 따라서에서 onCreate는 방향에 호출되지 않습니다 변화. 감사! – RominaV

+0

여전히 '보기'에서 레이아웃 이벤트가 발생하고 잠금 모드가 설정되어 있으면 'DrawerLayout'이 그에 따라 서랍 상태를 설정합니다. 나는 내 대답을 약간 더 잘 표현할 것이다. –

+0

오, 예, 죄송합니다. 내 논리는 조금 벗어났다. 제발. 나는 대답을 고쳐 줄 것이다. –