How to get Android system settings?

The Android system settings screen for candy seems to use a layout that resembles a “map layout”.

enter image description here

I am trying to find the same for my application, but I can’t understand how they achieved this with the standard PreferenceFragment . Can someone explain to me how I can achieve the same effect without creating my own preferences?


Notice that I saw and read these questions, but they do not give a suitable answer:


If this is interesting, my current xml settings are as follows:

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

And I extend PreferenceFragment and load xml through

 addPreferencesFromResource(R.xml.prefs); 
+5
source share
2 answers

I "solved" this by adding a dummy Preference between the Preference elements, which uses a layout that distorts the appearance of the screenshot in the question:

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

With a layout that looks something like this:

 <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> 
+4
source

For me, this did not help set the background through the custom layout. Also the height was not applied.

It helps me:

 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 images are here: https://drive.google.com/file/d/1M5uXXnFc0HHx2BOHQqLtvAXFet4ICDj0/view?usp=sharing

0
source

Source: https://habr.com/ru/post/1242311/


All Articles