2015-05-14 7 views
0

У меня проблема, когда мне нужно щелкнуть как логотип, так и задний план + гамбургер/катер из моей панели действий. когда у меня ничего нет в моей задней части, отображается значок гамбургера и открывается мой левый ящик (затем через анимацию он меняется на стрелку, чтобы закрыть ящик).Как сделать значок и логотип ящика двумя разными кнопками в 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() я взять уход за левым ящиком (с правом закрытия) ИЛИ выполняется действие navigateBack.

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

создать представление, которое вы хотите на своем рабочем столе. установить на него всех слушателей, а затем установить view на панель действий с помощью 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

Он работает! Мне просто пришлось удалить теги DISPLAY_USE_LOGO и логотипа из styles.xml и создать макет только с изображением. Еще раз спасибо, как я не думал об этом раньше! –

+0

Не волнуйся! thanx to stackoverflow !! – vaibhav

 Смежные вопросы

  • Нет связанных вопросов^_^