Android: как заголовок центра в ToolBar
Я впервые использую ToolBar в своем проекте, поэтому я не знаю, как настроить панель инструментов в android. Мне нужно сфокусировать заголовок на панели инструментов и как это сделать, пожалуйста, скажите мне.
Заранее спасибо.
- c: forEach внутри перьев (например, p: panelgrid) внутри ui: repeat
- как удалить тень под панелью действий с помощью AppCompat.Light.NoActionBar?
- Не удается уловить событие нажатия кнопки кнопки панели инструментов
- Панель c # для рисования графики и прокрутки
- Изменение цвета фона отдельных элементов меню навигации
- Контекстные стили Actionbar
- Создание SearchView, который выглядит как руководство по разработке материалов
- В каком порядке панели наиболее эффективны с точки зрения времени и производительности?
- Как установить текст панели инструментов и цвет стрелки назад
- Как скрыть навигационную панель постоянно в андроид-активности?
- Панель навигации под панелью инструментов
- Как оживить Burger в Arrow с помощью Appcompat v7 21, панели инструментов и DrawerLayout
- Как скрыть строку состояния iOS
Помните, что 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
и внесите следующие изменения:
- добавить
TextView
- переопределить
onLayout()
и установить местоположениеTextView
чтобыtitleView.setX((getWidth() - titleView.getWidth())/2)
его (titleView.setX((getWidth() - titleView.getWidth())/2)
) - переопределить
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 theToolbar
. * Because by default the custom view in theToolbar
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";