Проблема с настройкой цвета на панели инструментов (android-kotlin)

#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. о господи, я не думал об использовании корня в этой форме, спасибо, чувак, ты спас мне жизнь.