Как удалить заголовок и сумму по умолчанию из макета настроек - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь создать пользовательские настройки предпочтений (которые будут содержать заголовок, сводку и индикатор выполнения, который укажет пользователю процесс синхронизации). У меня проблема с полным удалением оригинального заголовка и таблицы, потому что похоже, что в макете есть отступ (см. Прилагаемое изображение для более подробной информации)

Я создал пользовательский макет:

R.layout.manual_sync_layout

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="true"
        android:id="@+id/manual_sync_layout"
        android:background="?attr/selectableItemBackground">


    <ImageView
            android:id="@android:id/icon"
            app:layout_constraintTop_toTopOf="parent"
            android:visibility="gone"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@null"
            android:layout_gravity="center"/>

    <TextView android:id="@android:id/title"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              app:layout_constraintStart_toStartOf="parent"
              app:layout_constraintTop_toTopOf="parent"
              android:textSize="16sp"
              android:padding="10dp"
              android:text="@string/manual_sync"
              android:textColor="@android:color/black"/>
    <TextView
            app:layout_constraintTop_toBottomOf="@android:id/title"
            app:layout_constraintStart_toStartOf="parent"
            android:id="@android:id/summary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@android:id/title"
            android:layout_alignStart="@android:id/title"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="?android:attr/textColorSecondary"
            android:maxLines="4"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:text="@string/sync_manually_desc"
    />

    <ProgressBar
            android:id="@+id/manual_sync_progress"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:indeterminate="false"
            app:layout_constraintEnd_toEndOf="parent"
            style="?android:attr/progressBarStyleSmall"
            android:padding="10dp"
            android:visibility="gone"/>

</androidx.constraintlayout.widget.ConstraintLayout>

ManualSyncPreference

класс ManualSyncPreference @JvmOverloads конструктор (контекст: контекст, атрибуты: AttributeSet, defStyleAttr: Int = 0): Предпочтение (context, attrs, defStyleAttr) {

init {
    widgetLayoutResource = R.layout.manual_sync_layout
}

override fun onBindViewHolder(holder: PreferenceViewHolder) {
    super.onBindViewHolder(holder)
    val manualSyncLayout = holder.findViewById(R.id.manual_sync_layout)
    val syncProgress = holder.findViewById(R.id.manual_sync_progress)
    manualSyncLayout.setOnClickListener {
        syncProgress.visibility = if(syncProgress.visibility== View.VISIBLE) View.GONE else View.VISIBLE
    }

}

}

preferences.xml

<PreferenceCategory
        app:title="@string/sync_header">

    <SwitchPreferenceCompat
            app:key="sync"
            app:title="@string/sync_title"/>

    <SwitchPreferenceCompat
            app:key="attachment"
            app:title="@string/attachment_title"
            app:summaryOn="@string/attachment_summary_on"
            app:summaryOff="@string/attachment_summary_off"
            app:dependency="sync"/>

    <com.example.myapplication.ManualSyncPreference
            app:key="manual_key"
            app:title=""
            app:summary=""/>

</PreferenceCategory>

в последнем ряду большое поле

1 Ответ

0 голосов
/ 15 мая 2019

Вам необходимо установить layoutResource, а не widgetLayoutResource - ресурс макета виджета является частью макета предпочтений, который содержит виджет в конце, например, переключатель или флажок. В вашем случае вы хотите заменить весь макет, поэтому вам нужно изменить layoutResource. Я думаю, что просто переименование widgetLayoutResource в layoutResource должно работать здесь.

...