preference item 預設是有分隔線的,所以需要把它取消,取消的方法很簡單,只要用 setDivider 就好
但是要在 preference group 之間要加入分隔線卻沒有那麼容易,Android 沒有提供簡單的方法可以用,一個比較正統的作法可能是取得 PreferenceFragmentCompat 內的 RecyclerView 然後用 DividerItemDecoration 來畫出分隔線
- @Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- setDivider(null);
- super.onViewCreated(view, savedInstanceState);
- }
DividerItemDecoration 是 Android 官方提供的為 RecyclerView 劃出分隔線的方式,之前也有介紹過,但是這樣要寫太多的 code 了,而且還要自己判斷 RecyclerView 中的 item 是不是 PreferenceCategory,只是為了要加分隔線而已,這樣搞太複雜
一個簡單的方式是,自己在 preference layout 檔中加入一個 PreferenceCategory,並且讓這個 PreferenceCategory 套用我們自己做的客製化的 layout
在客製化 layout 中用 View 來當分隔線
- <android.support.v7.preference.PreferenceCategory
- android:layout="@layout/preference_divider">
- </android.support.v7.preference.PreferenceCategory>
這樣基本上就可以符合 Android material settings 的形式了,不過很奇怪為什麼 Android 既然自己提倡 material settings 這樣設計,為什麼沒有提供一個簡單的方法來讓開發者使用?還要自己做一個 layout 檔來 workaround,真的不知道該說甚麼
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
- <View
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:background="?android:attr/listDivider"/>
- </LinearLayout>
沒有留言:
張貼留言