Android: как заголовок центра в ToolBar

Я впервые использую ToolBar в своем проекте, поэтому я не знаю, как настроить панель инструментов в android. Мне нужно сфокусировать заголовок на панели инструментов и как это сделать, пожалуйста, скажите мне.

Заранее спасибо.

Помните, что Toolbar – это только ViewGroup как и другие. Таким образом, вы можете использовать View s в нем. В вашем случае вам нужен TextView внутри Toolbar .

    

Теперь установите Toolbar качестве Toolbar действий, сначала извлекая ее, а затем используя setSupportActionBar() .

Поскольку гравитация TextView установлена ​​в center , текст должен быть центрирован.

Проблема с простое добавление TextView в выравниваемом центре панели инструментов добавляет пункты меню на панели инструментов, которые будут смещать центрированный текст.

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

        

Таким образом, нет необходимости в дополнительной логике, чтобы компенсировать смещение интервалов кнопок / кнопок переполнения назад / иконки поиска и т. Д. На панели инструментов, потому что центрированный текст находится над ним, а не в нем.

Вы можете принудительно установить панель инструментов в центр, обернув заголовок заголовком и уровнем справа, который имеет по умолчанию оставленное дополнение для заголовка. Затем добавьте цвет фона родительскому элементу панели инструментов, и эта часть, которая вырезана путем обертывания заголовка, имеет тот же цвет (белый в моем примере):

    

ToolBar – группа просмотра. поэтому для выравнивания по центру Текст Используйте

app_bar.xml

     

activity_sign_up

     

Avtivity

 public class SignUpActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_up); Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); } } 

Когда у вас есть кнопка «Домой» или «Вверх» вместе с центральным заголовком, а заголовок больше не центрирован и немного сдвинут вправо, установите текст в виде width = wrap_content и layout_gravity = center

  

Просто TextView еще один TextView внутри Toolbar недостаточно, чтобы получить центральную ориентацию по отношению к экрану, ее позиция будет зависеть от других элементов на панели инструментов (кнопка возврата, элементы меню).

Чтобы создать центральную ориентацию, вы можете вручную установить ее положение:

Расширьте class android.support.v7.widget.Toolbar и внесите следующие изменения:

  1. добавить TextView
  2. переопределить onLayout() и установить местоположение TextView чтобы titleView.setX((getWidth() - titleView.getWidth())/2) его ( titleView.setX((getWidth() - titleView.getWidth())/2) )
  3. переопределить setTitle() где установить текст заголовка в новый текстовый вид
     Открытый class CenteredToolbar расширяет панель инструментов {

         private TextView titleView;

         public CenteredToolbar (контекст контекста) {
             это (контекст, null);
         }

         public CenteredToolbar (контекст контекста, @Nullable AttributeSet attrs) {
             это (контекст, attrs, android.support.v7.appcompat.R.attr.toolbarStyle);
         }

         public CenteredToolbar (контекст контекста, @Nullable AttributeSet attrs, int defStyleAttr) {
             супер (контекст, attrs, defStyleAttr);

             titleView = новый TextView (getContext ());

             int textAppearanceStyleResId;
             TypedArray a = context.getTheme (). GetStyledAttributes (attrs,
                     new int [] {android.support.v7.appcompat.R.attr.titleTextAppearance}, defStyleAttr, 0);
             пытаться {
                 textAppearanceStyleResId = a.getResourceId (0, 0);
             } в конце концов {
                 a.recycle ();
             }
             if (textAppearanceStyleResId> 0) {
                 titleView.setTextAppearance (контекст, textAppearanceStyleResId);
             }

             addView (titleView, новые LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
         }

         @Override
         protected void onLayout (boolean changed, int l, int t, int r, int b) {
             super.onLayout (изменено, l, t, r, b);
             titleView.setX ((getWidth () - titleView.getWidth ()) / 2);
         }

         @Override 
          public void setTitle (название CharSequence) { 
              titleView.setText (название); 
          }
     }

В макете вы можете использовать этот class следующим образом:

  

Кроме того, чтобы новый текст заголовка выглядел как стандартный заголовок, вы должны применить стиль titleTextAppearance к новому TextView ( titleView.setTextAppearance(context, textAppearanceStyleResId) ).

Окончательный интерфейс выглядит следующим образом: введите описание изображения здесь Для моего проекта у меня есть значок навигации слева и меню (более 1) справа, и вы хотите разместить Title в центре.

У меня есть setSupportActionBar(toolbar) и _actionBar.setCustomView(R.layout.actionbar_filter); , Мой файл макета:

     

Моя панель инструментов расширяет android.support.v7.widget.Toolbar, затем (вид жесткого кода) измеряет размер RelativeLayout и, наконец, размещает его в горизонтальном центре.

 /** * Customized the RelativeLayout inside the Toolbar. * Because by default the custom view in the Toolbar cannot set * width as our expect value. So this class allows setting the width of the * RelativeLayout to take up any percentage of the screen width. */ public class CenteredToolbar extends Toolbar { private static final double WIDTH_PERCENTAGE = 0.8; private TextView titleView; public CenteredToolbar(Context context) { this(context, null); } public CenteredToolbar(Context context, @Nullable AttributeSet attrs) { this(context, attrs, android.support.v7.appcompat.R.attr.toolbarStyle); } public CenteredToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View view = this.getChildAt(i); if (view instanceof RelativeLayout) { int width = getMeasuredWidth(); ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); layoutParams.width = (int) (width * WIDTH_PERCENTAGE); view.setLayoutParams(layoutParams); break; } } } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View view = this.getChildAt(i); if (view instanceof RelativeLayout) { forceTitleCenter(view); break; } } } /** * Centering the layout. * * @param view The view to be centered */ private void forceTitleCenter(View view) { int toolbarWidth = getMeasuredWidth(); int relativeLayoutWidth = view.getMeasuredWidth(); int newLeft = (int) (toolbarWidth - relativeLayoutWidth) / 2; int top = view.getTop(); int newRight = newLeft + relativeLayoutWidth; int bottom = view.getBottom(); view.layout(newLeft, top, newRight, bottom); } } 

Прикрепите макет панели инструментов. Может быть, вам это не нужно, я просто приклеиваю здесь для ссылки на кого-то:

   

Проверьте полный ответ здесь: https://stackoverflow.com/a/35723158/445548

  public void centerTitleAndSubtitle(Toolbar toolbar){ // Save current title and subtitle final CharSequence originalTitle = toolbar.getTitle(); final CharSequence originalSubtitle = toolbar.getSubtitle(); // Temporarily modify title and subtitle to help detecting each toolbar.setTitle("title"); toolbar.setSubtitle("subtitle"); for(int i = 0; i < toolbar.getChildCount(); i++){ View view = toolbar.getChildAt(i); if(view instanceof TextView){ TextView textView = (TextView) view; if(textView.getText().equals("title")){ // Customize title's TextView Toolbar.LayoutParams params = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT); params.gravity = Gravity.CENTER_HORIZONTAL; textView.setLayoutParams(params); } else if(textView.getText().equals("subtitle")){ // Customize subtitle's TextView Toolbar.LayoutParams params = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT); params.gravity = Gravity.CENTER_HORIZONTAL; textView.setLayoutParams(params); } } // Restore title and subtitle toolbar.setTitle(originalTitle); toolbar.setSubtitle(originalSubtitle); } } 

Использовать пользовательский заголовок (с центром тяжести) внутри панели инструментов

     

Поскольку панель инструментов представляет собой группу представлений, поэтому вы можете создавать макеты внутри нее. Следуй этим шагам

1 – Создайте текстовое изображение внутри вашей панели инструментов 2 – сделайте свой центр тяжести textview

      

Я не понял тебя. Вопрос полностью … но я нашел решение.

Чтобы использовать пользовательский заголовок на панели инструментов, все, что вам нужно сделать, это помнить, что панель инструментов – просто причудливая ViewGroup, поэтому вы можете добавить собственный заголовок так:

    

Это означает, что вы можете стилизовать TextView, но вы хотите, потому что это обычный текстовый файл. Поэтому в вашей деятельности вы можете получить доступ к названию так:

 Toolbar toolbarTop = (Toolbar) findViewById(R.id.toolbar_top); TextView mTitle = (TextView) toolbarTop.findViewById(R.id.toolbar_title); 

set collapsedTitleGravity к центру

      

Я думаю, это сработает.

 name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar" 

измените базовую тему в значениях / styles.xml

Затем добавьте панель инструментов вручную

  

Но это нехорошо, что это плохо работает.

вы можете вставить этот код в свой код

 SupportActionBar.Title = "title"; 
  • self.title устанавливает заголовок navigationController и tabBarItem? Зачем?
  • как удалить тень под панелью действий с помощью AppCompat.Light.NoActionBar?
  • Как установить текст панели инструментов и цвет стрелки назад
  • Как скрыть строку состояния iOS
  • Изменить размер для строки состояния вызова?
  • c: forEach внутри перьев (например, p: panelgrid) внутри ui: repeat
  • Как оживить Burger в Arrow с помощью Appcompat v7 21, панели инструментов и DrawerLayout
  • В каком порядке панели наиболее эффективны с точки зрения времени и производительности?
  • Interesting Posts

    Почему для MediaPlayer для Android требуется много времени для подготовки некоторых живых streamов для воспроизведения?

    boost :: spirit :: qi повторение синтаксического анализа на выходе

    Контекст среды Entity как статический

    Как получить доступ к DIV-маркеру API Карт Google Maps v3 и его позиции пикселя?

    Как сделать ToString для возможно нулевого объекта?

    Планирование JavaBean с помощью свойств JavaFX

    Процессы Bash – процесс повторной привязки запущен в фоновом режиме

    Есть ли какое-либо программное обеспечение или аппаратное обеспечение, которое позволяет останавливать, замедлять, ускорять или даже отменять время?

    Как заставить «вы действительно хотите отключить?» Диалог в Windows 7?

    Предупреждения Proguard “не могут писать ресурс (Дублирование записи в zip)”

    Проверка формы jQuery при нажатии кнопки

    Как объединить два файла PDF в один на Java?

    Windows 10 Explorer отключает имя папки после символа последнего периода

    Структура данных для загруженных кубиков?

    Заменить динамический контент в XML-файле

    Давайте будем гением компьютера.