2013-12-23 47 views
4

我正在關注這個職位http://derekrwoods.com/2013/09/creating-a-static-navigation-drawer-in-android/在旋轉改變時切換Android導航抽屜的DrawerLockMode。

我想要抽屜在橫向模式下打開。這是我的onCreate函數。

@Override 
protected void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.activity_order); 

    drawerList = (ListView) findViewById(R.id.left_drawer); 

    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

    FrameLayout frameLayout = (FrameLayout) findViewById(R.id.content_frame); 

    if (((ViewGroup.MarginLayoutParams) frameLayout.getLayoutParams()).leftMargin == (int) getResources() 
      .getDimension(R.dimen.drawer_size)) { 
     drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN); 
     drawerLayout.setScrimColor(Color.TRANSPARENT); 
     isDrawerLocked = true; 
    } 

    // Set the adapter for the list view 
    // drawerItems = getResources().getStringArray(R.array.drawerOptions); 
    drawerItems = DummyContent.ITEMS 
      .toArray(new DummyItem[DummyContent.ITEMS.size()]); 
    drawerList.setAdapter(new ArrayAdapter<DummyItem>(this, 
      android.R.layout.simple_list_item_1, drawerItems)); 
    drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, 
      R.drawable.ic_drawer, R.string.action_short, 
      R.string.action_short) { 

     /** Called when a drawer has settled in a completely closed state. */ 
     public void onDrawerClosed(View view) { 
      getActionBar().setTitle("test"); 
      // ((FragmentInterface) fragment).showMenuActions(); 
      invalidateOptionsMenu(); 
     } 

     /** Called when a drawer has settled in a completely open state. */ 
     public void onDrawerOpened(View drawerView) { 
      getActionBar().setTitle("Select Option"); 
      // ((FragmentInterface) fragment).hideMenuActions(); 
      invalidateOptionsMenu(); 
     } 
    }; 

    if (!isDrawerLocked) { 
     drawerLayout.setDrawerListener(drawerToggle); 
    } 

    // Set the drawer toggle as the DrawerListener 
    DrawerItemClickListener drawerItemClickListener = new DrawerItemClickListener(); 
    drawerList.setOnItemClickListener(drawerItemClickListener); 

    if (!isDrawerLocked) { 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
} 

現在的問題是,每當我的活動是在縱向模式啓動,之後的旋轉抽屜是可摺疊(可使用右滑動到左的手勢被關閉),即使設置DrawerLayout.LOCK_MODE_LOCKED_OPEN後。直接在橫向模式下打開時,不會發生此問題。

回答

-1

您應該自己處理配置更改。

使用onConfigurationChanged回調方法可以隨時瞭解您所處的方向。確保在清單中包含android:configurationChanges="orientation"標記。請參閱用戶指南的this section以獲取處理配置更改的快速說明。

我認爲問題的根源在於Android處理生命週期方法的方式與您期望的稍有不同。使用明確的onConfigurationChanged方法將消除任何歧義。

+0

我應該重新初始化上onConfigChanges什麼價值觀 –

+0

在onConfigurationChanged中,檢查新的方向。如果是風景,請打開抽屜並將其鎖定。如果是縱向顯示,請將抽屜重新關閉並解鎖,或將其重新設置回用戶上次完成縱向拍攝的任何內容。 –

5

我不得不代碼移動到我的onResume():

@Override 
public void onResume() { 
    super.onResume(); 

    Display display = getWindowManager().getDefaultDisplay(); 

    if (display.getRotation() == Surface.ROTATION_90 || display.getRotation() == Surface.ROTATION_270) { 
     // Landscape 
     isDrawerLocked = true; 
     mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN); 
    } else { 
     // Portrait 
     isDrawerLocked = false; 
     mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
    } 
} 
+1

即使代碼被調用,這也解決了我遇到的類似問題。將它移入onResume可以正確鎖定/解鎖。如果有人知道爲什麼這是我想知道的情況。 – Ben987654