2016-02-04 10 views
5

Der Android-Systemeinstellungen Bildschirm auf Lollipop scheint ein Layout zu verwenden, das dem "Kartenlayout" ähnelt.Wie Android Systemeinstellungen aussehen?

enter image description here

Ich versuche, das gleiche Aussehen für meine App zu bekommen, kann aber nicht sehen, wie sie es mit dem PreferenceFragment Standard erreicht. Kann mir jemand erklären, wie ich denselben Effekt erzielen kann, ohne meine eigenen Präferenzen schreiben zu müssen?


Bitte beachte, dass ich diese Fragen gesehen und gelesen, aber sie bieten keine passende Antwort.

anwenden zu wollen, 10

Wenn es von Interesse ist, sieht meine aktuellen Einstellungen xml wie folgt aus:

<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> 

Und ich verlängern PreferenceFragment und laden Sie die xml über

addPreferencesFromResource(R.xml.prefs); 
+0

keine api> 20 Geräte zur Hand haben Sie, haben Sie versucht, auf der Suche es mit Ihrem Gerät Monitor -> Dump View-Hierarchie? –

+0

@DavidMedenjak Das macht mir eine Hierarchie von Layouts. Was mache ich damit? Wie gesagt, ich versuche nicht, die Layoutstruktur in einem normalen Layout zu reproduzieren, sondern möchte, dass mein existierendes 'PreferenceFragment' gleich aussieht. – Baz

Antwort

4

Ich habe „gelöst“ dies, indem eine Dummy-Preference zwischen den PreferenceCategory Elemente, die verwendet ein Layout, das den Blick in den Screenshot in der Frage mimmicks:

<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> 

Mit einem Layout, das ungefähr so ​​aussieht:

<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

Wie haben Sie shadow_top und shadow_bottom definiert? –

+0

@JavierDelgado Sie sind nur Bilder ([9-Patch] (https://developer.android.com/studio/write/draw9patch.html)). – Baz

+0

Jede Chance, die Sie teilen? – JayTee

0

Für mich ist es nicht einen Hintergrund über ein eigenes Layout gesetzt funktioniert. Auch die Höhe galt nicht.

dass, obwohl für mich gearbeitet:

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 Patch-Bilder sind hier: https://drive.google.com/file/d/1M5uXXnFc0HHx2BOHQqLtvAXFet4ICDj0/view?usp=sharing

Verwandte Themen