2015-05-14 59 views
0

我有一個問題,我需要能夠從我的操作欄上單擊徽標和backarrow +漢堡包/食客。當我的後臺沒有任何東西時,顯示漢堡圖標並打開我的左側抽屜(然後通過動畫將其更改爲箭頭以關閉抽屜)。如何使抽屜圖標和徽標兩個不同的按鈕在ActionBar

顯示圖標旁邊AppLogo:

getSupportActionBar().setHomeButtonEnabled(true); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

我有ActionBarDrawerToggle檢查,如果它的左被打開抽屜(因爲我有不能與漢堡圖標動畫干擾也對抽屜)。

ActionBarDrawerToggle

mDrawerListener = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_closed) { 

     //must override these methods to make only left drawer change the icon of drawer in the corner, when opened 

     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
      if (drawerView.getId() == R.id.left_drawer) { 
       super.onDrawerSlide(drawerView, slideOffset); 
      } 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      if (drawerView.getId() == R.id.left_drawer) { 
       super.onDrawerOpened(drawerView); 
      } 
     } 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      if (drawerView.getId() == R.id.left_drawer) { 
       super.onDrawerClosed(drawerView); 
      } 
     } 
    }; 
    drawerLayout.setDrawerListener(mDrawerListener); 

當瀏覽防曬是可能的,該圖標改變到箭頭通過禁用指示器

onBackStackChanged()

@Override 
    public void onBackStackChanged() { 
     // disable drawer icon and leave backarrow icon if backstack not empty 
     boolean canBack = getSupportFragmentManager().getBackStackEntryCount() > 0; 
     if (canBack) { 
      mDrawerListener.setDrawerIndicatorEnabled(false); 
     } else { 
      mDrawerListener.setDrawerIndicatorEnabled(true); 
     } 
    } 

OnOptionsItemSelected()我走關心左抽屜(右一個關閉)或導航回溯操作。

OnOptionsItemSelected()

public boolean onOptionsItemSelected(MenuItem item) { 
    Helper.dismissKeyboard(this); 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      if (getSupportFragmentManager().getBackStackEntryCount() > 0) { 
       onSupportNavigateUp(); 
      } else { 
       if (drawerLayout.isDrawerOpen(drawerSports)) { 
        drawerLayout.closeDrawer(drawerSports); 
       } else { 
        if (drawerLayout.isDrawerOpen(lvMyAccount)) { 
         drawerLayout.closeDrawer(lvMyAccount); 
        } 
        drawerLayout.openDrawer(drawerSports); 
       } 

      } 
      return true; 

Styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:actionBarStyle">@style/MyActionBar</item> 
    <item name="actionBarStyle">@style/MyActionBar</item> 
</style> 

<style name="MyActionBar" > 
    <item name="android:background">@color/blue</item> 
    <item name="background">@color/blue</item> 
    <item name="android:logo">@drawable/logo_marathon</item> 
    <item name="logo">@drawable/logo_marathon</item> 
    <item name="android:displayOptions">showHome|useLogo</item> 
    <item name="displayOptions">showHome|useLogo</item> 

</style> 
... 

這不是我的項目,所以我可能不知道如何的一切配置,我不能如有必要,請對其進行任何重大更改,所以我需要將onClick方法添加到徽標,但我不知道如何。我試過<item name="onClick">customLogoClickMethod</item>,但它沒有幫助。

回答

0

在您的操作欄上創建您想要的視圖。設置所有偵聽器,並通過getActionBar()將視圖設置爲操作欄。setCustomView();

如:

getActionBar().setDisplayOptions(
       ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_USE_LOGO 
         | ActionBar.DISPLAY_SHOW_HOME 
         | ActionBar.DISPLAY_HOME_AS_UP); 

     LayoutInflater inflater = (LayoutInflater) this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     // inflate the view that we created before 
     View v = inflater.inflate(R.layout.sample_titlebar, null); 

//set all the listeners here with that view 
//and than 

getActionBar().setCustomView(); 
+0

謝謝,我會嘗試,但你可能是指'getActionBar()setCustomView至(v)'如果我使用自定義視圖與ImageView的是我的標誌,我可能不要。我需要DISPLAY_USE_LOGO,對嗎? –

+0

它的工作原理!我只需從styles.xml中刪除DISPLAY_USE_LOGO和徽標標籤,並創建一個只有圖像視圖的佈局。再次感謝,我以前怎麼沒有想過這件事! –

+0

不要擔心它發生! thanx到stackoverflow! – vaibhav

相關問題