Как удалить отступ между заголовком предпочтения и следующим предпочтением?

Я хочу убрать фиолетовый пробел на экране настроек: preference

чтобы это выглядело так: пример Google Play Store

Я использую Xamarin Android и С# для разработки своего приложения. Экран предпочтений представляет собой PreferenceFragmentCompat из библиотеки Android.Support.V7.Preferences. Стиль материала установлен в моей пользовательской теме:

<style name="Theme.DarkTheme" parent="Theme.AppCompat.NoActionBar">
   <item name="colorPrimary">#673AB7</item>
   <item name="colorPrimaryDark">#512DA8</item>
   <item name="colorAccent">#039be5</item><!--#FF4081-->
   <item name="colorControlHighlight">#242424</item>
   <item name="android:listDivider">@style/android:drawable/divider_horizontal_dim_dark</item> 
   <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item> 

Вот как выглядит мой файл ресурсов xml, который я вызываю с помощью AddPreferencesFromResource(Resources.Id.preference_screen) в моей функции PreferenceFragmentCompats OnCreatePreferences():

<android.support.v7.preference.PreferenceScreen 
   xmlns:android="http://schemas.android.com/apk/res/android">
   <android.support.v7.preference.PreferenceCategory
    android:title="App">
        <Preference
            android:key="advsettings_preference"
            android:title="Erweiterte Einstellungen" />
        <Preference
            android:key="license_preference"
            android:title="Rechtliche Hinweise" />
   </android.support.v7.preference.PreferenceCategory>
</android.support.v7.preference.PreferenceScreen>

Я уже пытался исправить это сам, добавив атрибуты заполнения в PreferenceScreen, но ничего не изменилось.

Все последние пакеты NuGet из Xamarin Android установлены (v27.0.2). Заранее спасибо.


comment
Не могли бы вы предоставить свою пользовательскую тему @style/PreferenceThemeOverlay.v14.Material?   -  person Elvis Xia - MSFT    schedule 13.03.2018
comment
Библиотека Android.Support.V7.Preferences предоставляет @style/PreferenceThemeOverlay.v14.Material. Я просто имею в виду это. Посмотрите это руководство о том, как разработать собственный экран предпочтений. Он заканчивается тем же результатом, но должен быть способ удалить поля/отступы. Иначе Google Play Store или Whats App, основанные на той же теме, не выглядели бы так.   -  person pedzer    schedule 13.03.2018


Ответы (2)


Пожалуйста, попробуйте установить такой стиль;

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ...
    <!-- Customize your theme here. -->
    <item name="preferenceTheme">@style/MyPreferenceStyle</item>
</style>

<style name="MyPreferenceStyle" parent="@style/PreferenceThemeOverlay.v14.Material">
    <item name="preferenceCategoryStyle">@style/MyPreferenceCategoryStyle</item>
    <item name="android:paddingLeft">10dp</item>
    <item name="android:paddingRight">10dp</item>
</style>

<style name="MyPreferenceCategoryStyle" parent="@style/Preference.Category.Material">
    <item name="android:layout">@layout/preference_category</item>
</style>

И preference_category.axml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+android:id/title"
    android:textColor="?android:attr/colorAccent"
    android:textSize="14dp"
    android:fontFamily="sans-serif-medium"
    android:paddingStart="16dp"
    android:singleLine="true"
    android:paddingTop="16dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

И настройки приложений:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
    <android.support.v7.preference.PreferenceCategory
        android:title="App">
        <Preference
            android:key="advsettings_preference"
            android:title="Erweiterte Einstellungen"
            android:summary="BenachRichtigung"/>
    </android.support.v7.preference.PreferenceCategory>
</android.support.v7.preference.PreferenceScreen>

Это решит проблему с зазором. А также выглядеть так же, как на скриншоте Google Play Store. Ну, не совсем так же, как в Layout Inspector, но похоже:

введите здесь описание изображения

person Elvis Xia - MSFT    schedule 14.03.2018
comment
Проблема с фиолетовым зазором теперь исправлена, но я хочу добавить отступ слева/справа. Я следовал вашим шагам, но результат выглядит как что, и теперь у меня 3x 8dp peddings. Как получить только самый внешний педдинг (1)? - person pedzer; 14.03.2018
comment
Эти кадры и промежутки автоматически генерируются PreferenceCategory и контейнерами внутри. Вы можете увидеть это из Layout Inspector. Я не думаю, что их можно удалить. рассмотрите возможность изменения, чтобы использовать другой тип предпочтений. - person Elvis Xia - MSFT; 15.03.2018

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

Я предлагаю попробовать создать собственный макет для ваших PreferenceCategory и ваших Preference и установить их в приведенном выше axml, используя атрибут android:layout как таковой:

android:layout="@layout/layout_name"

(Возможно, придется поиграть с обоими android:layout и атрибуты android:widgetLayout)

person Raimo    schedule 12.03.2018
comment
К сожалению, добавление android:layout_marginBottom="-5dp" к android.support.v7.preference.PreferenceCategory или любому другому элементу в файле preference_screen.xml не помогает. - person pedzer; 13.03.2018
comment
@pedzer Обновил мой ответ, посмотрите, пожалуйста. - person Raimo; 13.03.2018
comment
Я уже пытался создать свой собственный макет, но мне не удалось получить ресурсы PreferenceCatogory в @style/PreferenceThemeOverlay.v14.Material, чтобы он выглядел как Google Play Store. Тем не менее, я проверю это во второй раз позже на этой неделе. - person pedzer; 13.03.2018