#android #xml #kotlin
Вопрос:
У меня проблема с моей панелью инструментов.
Я хочу, чтобы приложение устройства и панель инструментов были одного цвета, но не используйте findviewbyid. (Я переношу весь проект только для просмотра привязки )
Поведение в порядке (с использованием findviewbyid).
Поведение NOK (с использованием привязки представления) приводит к небольшому смещению текстового представления, похоже, оно получает поле, которое не было размещено.
Но если я объявляю другое в методе onWindowsInsetsChanged или не использую его, у меня возникает другая проблема, цвет неправильный.
Использование findviewbyid:
override fun onWindowsInsetsChanged(view: View, insets: WindowInsets, padding: InitialPadding) { with(binding) { val toolbar = fragmentEditObjectiveNameRoot.findViewByIdlt;Viewgt;(R.id.toolbar) toolbar.updatePadding(top = topInset) editObjectiveNameRoot.updatePadding( bottom = insets.systemWindowInsetBottom ) } }
Использование привязки представления:
override fun onWindowsInsetsChanged(view: View, insets: WindowInsets, padding: InitialPadding) { with(binding) { //calling the include toolbar and the root of the toolbar fragment toolbar.viewImageToolbar.updatePadding( top = topInset ) editObjectiveNameRoot.updatePadding( bottom = insets.systemWindowInsetBottom ) } }
Другое объявление в onWindowsInsetsChanged:
override fun onWindowsInsetsChanged(view: View, insets: WindowInsets, padding: InitialPadding) { with(binding) { //calling root from fragment and instead of calling the include toolbar and its root fragmentEditObjectiveNameRoot.updatePadding( top = topInset ) editObjectiveNameRoot.updatePadding( bottom = insets.systemWindowInsetBottom ) } }
I would like to leave the same color behavior when using findviewbyid, but with view binding, but without losing textView alignment.
Here is the xml that receives the toolbar include:
lt;?xml version="1.0" encoding="utf-8"?gt; lt;androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@ id/fragmentEditObjectiveNameRoot" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"gt; lt;androidx.constraintlayout.widget.ConstraintLayout android:id="@ id/editObjectiveNameRoot" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"gt; lt;FrameLayout android:id="@ id/bgColorFrameLayout" android:layout_width="match_parent" android:layout_height="@dimen/color_frame_layout_height" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/toolbar" /gt; lt;androidx.core.widget.NestedScrollView android:id="@ id/scrollView" android:layout_width="0dp" android:layout_height="0dp" android:fillViewport="true" android:clipToPadding="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/toolbar"gt; lt;androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginStart="@dimen/screen_margin_horizontal" android:layout_marginTop="18dp" android:layout_marginEnd="@dimen/screen_margin_horizontal" android:paddingBottom="16dp"gt; lt;com.google.android.material.card.MaterialCardView android:id="@ id/cardView" android:layout_width="match_parent" android:layout_height="wrap_content" app:cardBackgroundColor="@color/bari_white" app:cardCornerRadius="@dimen/card_corner_radius" app:cardElevation="0dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"gt; lt;androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="@dimen/card_padding"gt; lt;TextView android:id="@ id/titleSubAccount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="@string/sub_account_control_settings_edit_name" android:textAlignment="center" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /gt; lt;br.com.bancobari.core_ui.views.text_input.BariTextInputLayout android:id="@ id/nameInputLayout" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="32dp" app:helperIconEnabled="true" app:helperStart_enabled="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/titleSubAccount"gt; lt;br.com.bancobari.core_ui.views.text_input.BariTextInputEditText android:id="@ id/nameEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPersonName|textCapWords" android:maxLength="16" android:textAlignment="center" android:textSize="16sp" /gt; lt;/br.com.bancobari.core_ui.views.text_input.BariTextInputLayoutgt; lt;/androidx.constraintlayout.widget.ConstraintLayoutgt; lt;/com.google.android.material.card.MaterialCardViewgt; lt;br.com.bancobari.core_ui.views.SubmitButton android:id="@ id/saveButton" style="@style/DefaultButton.Icon.Arrow" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="18dp" android:text="@string/objective_settings_save" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/cardView" app:layout_constraintVertical_bias="1.0" /gt; lt;/androidx.constraintlayout.widget.ConstraintLayoutgt; lt;/androidx.core.widget.NestedScrollViewgt; lt;include android:id="@ id/toolbar" layout="@layout/view_image_toolbar" /gt; lt;/androidx.constraintlayout.widget.ConstraintLayoutgt; lt;/androidx.coordinatorlayout.widget.CoordinatorLayoutgt;
Здесь панель инструментов xml
lt;?xml version="1.0" encoding="utf-8"?gt; lt;androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content"gt; lt;androidx.appcompat.widget.Toolbar android:id="@ id/viewImageToolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:minHeight="@dimen/custom_toolbar_height" app:contentInsetLeft="0dp" app:contentInsetStart="0dp" app:contentInsetStartWithNavigation="0dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"gt; lt;View android:layout_width="0dp" android:layout_height="@dimen/custom_toolbar_height" /gt; lt;/androidx.appcompat.widget.Toolbargt; lt;TextView android:id="@ id/iconEmojiView" android:layout_width="30dp" android:layout_height="30dp" android:layout_marginEnd="10dp" android:gravity="bottom" android:textSize="22.5sp" android:visibility="gone" app:layout_constraintBottom_toBottomOf="@id/toolbarTitleTextView" app:layout_constraintEnd_toStartOf="@ id/toolbarTitleTextView" tools:visibility="visible" /gt; lt;TextView android:id="@ id/toolbarTitleTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:ellipsize="end" android:fontFamily="@font/nunito_bold" android:gravity="center" android:lines="1" android:textColor="@color/text_neutral_gray_800" android:textSize="18sp" app:layout_constraintBottom_toBottomOf="@id/viewImageToolbar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="Teste" /gt; lt;ImageView android:id="@ id/toolbarRightIconImageView" style="@style/Widget.AppCompat.ActionButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_settings" android:visibility="gone" app:layout_constraintBottom_toBottomOf="@id/toolbarTitleTextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/toolbarTitleTextView" /gt; lt;/androidx.constraintlayout.widget.ConstraintLayoutgt;
Комментарии:
1. В вашем
findViewById
случае вы ищете представление с идентификаторомtoolbar
, но со ссылкой на привязку представления вы используете представление с идентификаторомviewImageToolbar
, поэтому это не один и тот же элемент макета.2. @Tenfour04 да, в первом случае с использованием
findViewById
Я получаю доступ кinclude toolbar
идентификатору и могу получить доступ кupdatePadding
методу, во втором случае, если я используюview binding
для доступа кinclude toolbar
идентификатору, я не могу использоватьupdatePadding
метод, который я только что использовал, что я сделал, вызываяtoolbar.viewImageToolbar
, чтобы иметь возможность использоватьupdatePadding
метод
Ответ №1:
В вашем первом блоке кода с findViewById
этим
val toolbar = fragmentEditObjectiveNameRoot.findViewByIdlt;Viewgt;(R.id.toolbar)
возвращает ConstraintLayout в корне вашего включенного макета с помощью панели инструментов идентификаторов.
Свойство toolbar
в вашей привязке является другой привязкой для включенного макета, а не корневым представлением этого макета. root
Свойство этой включенной привязки в данном случае является тем же ограничением, что и выше, поэтому вместо этого следует использовать:
toolbar.root.updatePadding( top = topInset )
То, что вы делали, было изменением заполнения внутреннего представления всего макета панели инструментов, viewImageToolbar
элемента.
Комментарии:
1. о господи, я не думал об использовании корня в этой форме, спасибо, чувак, ты спас мне жизнь.