2016-02-04 53 views
5

棒棒糖上的android系统偏好设置屏幕似乎使用类似于“卡片布局”的布局。如何获取Android系统偏好设置?

enter image description here

我试图让我的应用程序相同的外观,但不能看到他们如何使用默认PreferenceFragment实现它。任何人都可以向我解释,我怎样才能达到同样的效果,而不必写我自己的喜好?


请注意,我已经看到并阅读这些问题,但他们没有提供合适的答案:


如果是感兴趣的,我目前的喜好XML看起来是这样的:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:custom="http://schemas.android.com/apk/res-auto"> 

    <PreferenceCategory android:title="@string/preferences_title_general"> 
     <Preference 
      android:key="Prefs.Delete.Row.Token" 
      android:summary="@string/preferences_delete_row_token_summary" 
      android:title="@string/preferences_delete_row_token_title"/> 
     <Preference 
      android:key="Prefs.Delete.Cell.Token" 
      android:summary="@string/preferences_delete_cell_token_summary" 
      android:title="@string/preferences_delete_cell_token_title"/> 
     <Preference 
      android:key="Prefs.Null.Token" 
      android:summary="@string/preferences_null_token_summary" 
      android:title="@string/preferences_null_token_title"/> 
    </PreferenceCategory> 
    <PreferenceCategory android:title="@string/preferences_title_appearance"> 
     <SwitchPreference 
      android:dialogTitle="@string/preferences_theme_title" 
      android:key="Prefs.Appearance.Theme" 
      android:summaryOff="@string/preferences_theme_summary_off" 
      android:summaryOn="@string/preferences_theme_summary_on" 
      android:switchTextOff="@string/general_no" 
      android:switchTextOn="@string/general_yes" 
      android:title="@string/preferences_theme_title"/> 
    </PreferenceCategory> 
    <PreferenceCategory android:title="@string/preferences_title_misc"> 
     <SwitchPreference 
      android:dialogTitle="@string/preferences_read_back_title" 
      android:key="Prefs.Voice.Feedback" 
      android:switchTextOff="@string/general_no" 
      android:switchTextOn="@string/general_yes" 
      android:title="@string/preferences_read_back_title"/> 
     <Preference 
      android:key="Prefs.Export.Barcode.Properties" 
      android:title="@string/preferences_export_title" 
      android:summary="@string/preferences_export_summary"/> 
     <Preference 
      android:key="Prefs.Show.Eula" 
      android:title="@string/preferences_eula_title" 
      android:summary="@string/preferences_eula_summary"/> 
    </PreferenceCategory> 

</PreferenceScreen> 

我延长PreferenceFragment,并通过

​​
+0

不要手边任何API> 20设备,你有没有尝试寻找它与您的设备监视器 - >转储视图层次结构? –

+0

@DavidMedenjak这样做给了我布局的层次结构。现在我该怎么做?正如我所说的,我不想重复布局结构的正常布局,但我宁愿让现有的'PreferenceFragment'看起来一样。 – Baz

回答

4

加载XML我已经加入“解决”这个虚拟PreferencePreferenceCategory项之间使用布局模仿在问题中的屏幕截图的外观:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:custom="http://schemas.android.com/apk/res-auto"> 
    <PreferenceCategory></PreferenceCategory> 

    <Preference layout="@layout/preference_divider" /> 

    <PreferenceCategory></PreferenceCategory> 
</PreferenceScreen> 

有了一个布局,看起来是这样的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:custom="http://schemas.android.com/apk/res-auto" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       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> 
+0

你是如何定义shadow_top和shadow_bottom的? –

+0

@JavierDelgado他们只是图片([9-patch](https://developer.android.com/studio/write/draw9patch.html))。 – Baz

+0

你有没有机会分享这些? – JayTee

0

对我来说,没有工作设置通过自定义布局的背景。此外,高度并不适用。

这对我来说,虽然工作:

public class PreferenceDivider extends Preference { 
    public PreferenceDivider(Context context) { 
     super(context); 
    } 
    public PreferenceDivider(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    @Override 
    protected View onCreateView(ViewGroup parent) { 
     Resources res=getContext().getResources(); 
     View v=super.onCreateView(parent); 
     v.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, res.getDimensionPixelSize(R.dimen.divider_height))); 
     v.setBackground(res.getDrawable(R.drawable.preference_category_divider, null)); 
     return v; 
    } 
} 

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:custom="http://schemas.android.com/apk/res-auto"> 
    <PreferenceCategory/>> 

    <your.package.path.PreferenceDivider/> 

    <PreferenceCategory/>> 

</PreferenceScreen> 

9补丁图像的位置:https://drive.google.com/file/d/1M5uXXnFc0HHx2BOHQqLtvAXFet4ICDj0/view?usp=sharing