Хотя это не подходит и эффективно использовать регулярные выражения для этой цели, иногда регулярные выражения предоставляют быстрые решения для простых проблем совпадения, и, на мой взгляд, не так уж и сложно использовать регулярные выражения для тривиальных работ.
Существует окончательное сообщение в блоге о совпадении сокровенных HTML-элементов, написанных Стивеном Левитаном.
Проблема заключается в том, что значок 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>
У меня была такая же проблема, и я исправил ее с помощью 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>
TextView
s просто станут шире. Если вы имеете в виду больший размер шрифта, тоTextView
s иLinearLayout
будут расти вертикально, а нижняяTextView
может быть сдвинута ниже нижней частиToolbar
и будет отключена. В любом случае, они не должны перекрываться, из-за того, какLinearLayout
работает. – Mike M. 1 February 2017 в 05:43ImageView
так же, какToolbar
. Тогда текст просто обрезается, но он не будет перекрывать изображение, так какImageView
находится сверху. – Mike M. 1 February 2017 в 05:54