2013-07-06 177 views
50

有什麼方法可以確保導航抽屜位於碎片內容的頂部嗎?導航抽屜 - 禁用點擊抽屜後面的物品

我用虛擬數據創建了一個小測試應用程序。 10個帶有相應編號按鈕和textview的片段。問題在於片段元素似乎比導航抽屜具有更高的優先級。

enter image description here

正如所看到的截圖,有一次我嘗試打開了「0片段」它,而不是選擇只登記在導航抽屜後面的按鈕點擊。按任何其他內容項目都可以正常工作,但只要在其下面沒有其他可交互項目,就可以。我可以做些什麼來讓導航抽屜正確地保持在它背後的內容之上?

+0

你有沒有嘗試設置actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); ? – Hruskozrout

回答

-1

嗯,我發現這個問題的一個解決方案。當抽屜打開時,您可以通過在您使用的佈局上調用bringToFront()方法將導航欄放在前面。這可確保導航抽屜一直處於任何基礎內容之上,直到選擇了新項目爲止。

即:

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

android:clickable =「true」對抽屜佈局是足夠的 – moondroid

+0

它爲我工作 – silverFoxA

124

上滑動面板佈局設置android:clickable="true"標籤。

+2

完美地爲我工作 –

+0

謝謝,馬里奧 – vuhung3990

+0

這個答案節省了我的時間.. :)工作完美.... – IshRoid

3

在我的片段抽屜中,我設置了TouchListener以返回True。 它爲我工作

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

最好的解決方案,接受並沒有爲我工作。 – peresisUser

2

我解決了它以不同的方式。

這裏是我設置的抽屜代碼:

/** 
* 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); 
} 

就是這樣