2015-12-21 2 views
0

Я пытаюсь выровнять назад стрелку значок панели с названием панели инструментов, но не нашел какой-либо полезный метод сделать это,панели инструментов назад значок стрелки не совпадает с Заголовком

По умолчанию, если вы будете устанавливать субтитры и текст заголовка , тогда значок со стрелкой вверх по вертикали будет установлен, по умолчанию, по умолчанию,

Я знаю, что могу сделать это, предоставив пользовательский макет на панели инструментов, но я хочу знать, есть ли какой-либо метод или поведение по умолчанию для этого?

enter image description here

/** 
    * For setting up actionbar/Toolbar 
    */ 
    private void setUpToolbar(){ 

     // Set a toolbar to replace the action bar. 
     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 

     //Enabling up back-up arrow 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 

     //Callback of up button pressed 
     //mToolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha); 
     mToolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //What to do on back clicked 
      } 
     }); 

     //setting up toolbar text 
     getSupportActionBar().setTitle(getToolbarTitle()); 
     //mToolbar.setTitleTextColor(getResources().getColor(R.color.textColorPrimary)); 
     getSupportActionBar().setSubtitle(getToolbarSubTitle()); 
     //mToolbar.setSubtitleTextColor(getResources().getColor(R.color.textColorPrimary)); 

     //set back arrow icon in middle 
     View navButtonView = getNavButtonView(mToolbar); 

     if(navButtonView != null) { 
      Toolbar.LayoutParams lp = (Toolbar.LayoutParams) navButtonView.getLayoutParams(); 
      lp.gravity = Gravity.TOP; 
      navButtonView.setLayoutParams(lp); 
     } 

    } 

ответ

1

Toolbar класс непосредственно не подвергать его ребенок View с или их свойства, но вы можете получить ссылку на эту View с помощью отражения.

private View getNavButtonView(Toolbar toolbar) { 
    try { 
     Class<?> toolbarClass = Toolbar.class; 
     Field navButtonField = toolbarClass.getDeclaredField("mNavButtonView"); 
     navButtonField.setAccessible(true); 
     View navButtonView = (View) navButtonField.get(toolbar); 

     return navButtonView; 
    } 
    catch (NoSuchFieldException | IllegalAccessException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

После View был создан, вы можете получить ссылку на него, а также настроить его LayoutParams по желанию.

View navButtonView = getNavButtonView(toolbar); 

if(navButtonView != null) { 
    Toolbar.LayoutParams lp = (Toolbar.LayoutParams) navButtonView.getLayoutParams(); 
    lp.gravity = Gravity.TOP; 
    navButtonView.setLayoutParams(lp); 
} 
+0

Спасибо за ваш ответ, но все равно назад стрелка остается в центре :( –

+0

Не могли бы вы опубликовать больше информации о вашей установке? Как макете и 'инициализации Toolbar'. Я буду видеть если я могу заставить его работать для вашей ситуации. Кроме того, какая версия Android вы используете. –

+0

Хм, ваш код работает для меня. Делаете ли вы что-либо с помощью «Панели инструментов» или поддержки «ActionBar» после вызова setUpToolbar() '? Как создание' ActionBarDrawerToggle'? Кроме того, какая версия Android вы используете? –

0

Если у вас нет прямой опции для установки позиции, у вас также может быть другая опция, эта опция предназначена для разных настроек. Для настройки кнопок на панели инструментов вы должны создать свою собственную панель инструментов. Я имею в виду, вместо того, чтобы использовать

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
 
getSupportActionBar().setDisplayShowHomeEnabled(true);

Вы можете добавить свои собственные кнопки на панели инструментов и выровнять положение, как вы хотите.

<android.support.v7.widget.Toolbar 
 
    android:id="@+id/toolbar" 
 
    android:layout_width="match_parent" 
 
    android:layout_height="?attr/actionBarSize" 
 
    android:background="?attr/colorPrimary" 
 
    android:fitsSystemWindows="true" 
 
    android:minHeight="?attr/actionBarSize" 
 
    app:popupTheme="@style/AppTheme.PopupOverlay"> 
 
    
 
    <Button 
 
     android:id="@+id/back_button" 
 
     .... 
 
     /> 
 
    <TextView 
 
     android:id="@+id/title" 
 
     .... 
 
     /> 
 
</android.support.v7.widget.Toolbar>

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