类别偏好后的物料分隔符

时间:2017-01-28 15:14:44

标签: android android-layout material-design android-view android-preferences

我正在尝试使用材质主题设置我的偏好,并且几乎就在那里。

我导入了以下内容:

compile 'com.android.support:preference-v7:25.1.0'
compile 'com.android.support:preference-v14:25.1.0'

然后在我的主应用主题中设置首选项主题:

<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>

我的偏好屏幕看起来很不错。我唯一的问题是类别没有空间或视觉分离,使得所有偏好看起来非常混乱。

材质设计文档显示的分隔符看起来像顶部和底部阴影(设备类别上方的IE):

几个问题:

  1. android是否提供此功能?如果有,那么有更新的appcompat主题吗?或者其他我做错了什么?

  2. 如果android尚未在材质偏好主题中提供此分隔符,是否有人创建了它?我看到了这一点,他创建了一个带有自定义布局的新类别Divider between category in PreferenceFragment。但我不完全确定如何创造所需的效果。

2 个答案:

答案 0 :(得分:5)

另一个答案很好,在这里稍微编辑一下,如果你根本不理解drawable。

XML /的preferences.xml

<PreferenceCategory
    android:layout="@layout/divider"
    android:title="Category2">
    <Preference
        android:title="Test1"
        android:summary="Summary1"/>

    </PreferenceCategory>

布局/ divider.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="10dp"
              android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_height="5dp"
        android:background="@drawable/shadow"/>


</LinearLayout>

抽拉/ shadow.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#1F000000"
        android:endColor="@android:color/transparent"
        android:angle="90" />
</shape>

答案 1 :(得分:2)

如果你仔细观察截图,你会注意到你想要的分隔效果在顶部和底部有一个阴影,但不是在中间。因此,对于分隔符,以下XML应该可以工作: -

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="10dp"
          android:orientation="vertical">

<View
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:background="@drawable/shadow_bottom"/>

<View
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:background="@drawable/shadow_top"/>

</LinearLayout>

现在,对于PreferenceScreen,要显示分隔符,您所要做的就是将PreferenceCategoryandroid:layout包含在上面的XML中。像android:layout="@layout/divider_layout"这样的东西。通过“空”偏好类别,我的意思是偏好类别不应该有Preference个孩子。

所以,你的PreferenceScreen应该是这样的: -

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory
            android:title="Category_First">

        <Preference
            android:title="prefA"/>

        </PreferenceCategory>

        <PreferenceCategory
            android:layout="@layout/divider_layout">
  </PreferenceCategory>

  <PreferenceCategory
            android:title="Category_Second">

        <Preference
            android:title="prefB"/>

  </PreferenceCategory>
</PreferenceScreen>