значок андроида - навигационного ящика, вызывая текст пользовательской панели инструментов из центра [дубликат]

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

Существует окончательное сообщение в блоге о совпадении сокровенных HTML-элементов, написанных Стивеном Левитаном.

3
задан Ankush Bist 3 February 2017 в 04:38
поделиться

2 ответа

Проблема заключается в том, что значок ActionBarDrawerToggle установлен в качестве кнопки навигации на Toolbar. Эта кнопка представляет собой специальный дочерний элемент Toolbar, который будет иметь приоритет в макете. Каждому другому дочернему View s, добавленному в Toolbar, будет выделено только пространство, оставшееся после этого ImageButton. Это толкает левую сторону вашего RelativeLayout вправо, так что TextView s, в котором вы сосредоточены, не будет центрироваться относительно самого Toolbar.

К счастью, Toolbar LayoutParams имеет свойство гравитации, которое мы можем использовать для центрирования LinearLayout и его TextView s непосредственно в Toolbar, без необходимости их обертывания в другой ViewGroup.

В этом примере мы применяем эту гравитацию центра, установив LinearLayout layout_gravity на center. Не забудьте также изменить значения layout_width на wrap_content, или вы будете в той же лодке, что и раньше. Здесь ImageView имеет layout_gravity значение right|center_vertical, заменяя те layout_* атрибуты, специфичные для RelativeLayout.

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimaryDark"
    android:elevation="5dp"
    android:minHeight="?attr/actionBarSize"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    app:contentInsetStartWithNavigation="0dp"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tvNavTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/colorWhite"
            android:textSize="@dimen/text_size_large" />

        <TextView
            android:id="@+id/tvNavDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/colorWhite"
            android:textSize="@dimen/text_size_small" />

    </LinearLayout>

    <ImageView
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:layout_gravity="right|center_vertical"
        android:src="@mipmap/ic_launcher" />

</android.support.v7.widget.Toolbar>

11
ответ дан Mike M. 16 August 2018 в 14:35
поделиться
  • 1
    спасибо, что потратили свое время. Но это не сработало для меня. – Ankush Bist 1 February 2017 в 04:55
  • 2
    Работает на меня. Я добавил скриншот макета в ответ. Измените свой вопрос с помощью существующего формата XML, и я посмотрю. – Mike M. 1 February 2017 в 04:57
  • 3
    Что ты имеешь в виду? Длинный текст, как и количество букв? Или с большим размером шрифта? Если вы имеете в виду дольше, то эти TextView s просто станут шире. Если вы имеете в виду больший размер шрифта, то TextView s и LinearLayout будут расти вертикально, а нижняя TextView может быть сдвинута ниже нижней части Toolbar и будет отключена. В любом случае, они не должны перекрываться, из-за того, как LinearLayout работает. – Mike M. 1 February 2017 в 05:43
  • 4
    На самом деле, более простым вариантом было бы просто установить цвет фона на ImageView так же, как Toolbar. Тогда текст просто обрезается, но он не будет перекрывать изображение, так как ImageView находится сверху. – Mike M. 1 February 2017 в 05:54
  • 5
    последний вариант превосходный: p. Точка кодирования аспектов я никогда не буду делать это: p. – Ankush Bist 1 February 2017 в 05:56

У меня была такая же проблема, и я исправил ее с помощью android:contentInset

Попробуйте с этим кодом:

<android.support.design.widget.CoordinatorLayout
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/app_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="@color/colorPrimary"
                android:contentInsetEnd="50dp"
                android:contentInsetLeft="50dp"
                android:contentInsetRight="50dp"
                android:contentInsetStart="50dp"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                app:contentInsetEnd="50dp"
                app:contentInsetLeft="50dp"
                app:contentInsetRight="50dp"
                app:contentInsetStart="50dp"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:layout_centerInParent="true"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="5dp"
                        android:text="@string/app_name_short"
                        android:textColor="#fff"
                        android:textSize="20dp" />

                </LinearLayout>

            </android.support.v7.widget.Toolbar>

        </android.support.design.widget.AppBarLayout>


        <FrameLayout
            android:id="@+id/main_fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/app_bar_layout" />


    </RelativeLayout>

</android.support.design.widget.CoordinatorLayout>
2
ответ дан Pablo 16 August 2018 в 14:35
поделиться
  • 1
    Спасибо чувак. Ваше решение решило мою проблему! – Hashir Baig 15 January 2018 в 12:11
Другие вопросы по тегам:

Похожие вопросы: