2016-04-20 16 views
1

Ich verwende PreferenceFragmentCompat aus der Support-Bibliothek v7, um einige Einstellungen anzuzeigen. Meine preferences.xml Datei ist wie folgt -Wie zeige ich Teiler in einem PreferenceFragment an?

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

    <EditTextPreference 
     android:defaultValue="@string/temp_url_default" 
     android:key="temp_edit_preference_key" 
     android:title="@string/temp_url_setting_title" /> 

    <EditTextPreference 
     android:defaultValue="" 
     android:key="username_preference_key" 
     android:title="@string/username_setting_title" /> 

    <EditTextPreference 
     android:defaultValue="" 
     android:key="password_preference_key" 
     android:title="@string/password_setting_title" /> 

    <ListPreference 
     android:key="reset_preference_key" 
     android:title="@string/reset_setting_title" /> 

</PreferenceScreen> 

Java-Code -

public class SettingsFragment extends PreferenceFragmentCompat { 

    @Override 
    public void onCreatePreferences(Bundle bundle, String s) { 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

Das Thema, das ich für Präferenzen bin mit ist -

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="preferenceTheme">@style/AppTheme.Preference</item> 
</style> 

<style name="AppTheme.Preference" parent="@style/PreferenceThemeOverlay"> 
    <item name="android:textColorPrimary">@android:color/holo_blue_dark</item> 
</style> 

Die vier Einstellungen sind eine gerade angezeigt unter dem anderen, ohne Zwischenschaltung. Wie zeige ich eine Trennlinie zwischen zwei Elementen?

Antwort

1

Für einige Revision verwendet die com.android.support:preference-v7 Support-Bibliothek die RecyclerView, um die Einstellungen jetzt anzuzeigen. Aus dem Kasten haben die RecyclerView keinen Teiler aber das Hinzufügen eines ItemDecoration zum RecyclerView funktioniert:

public class YourPreferenceFragment extends PreferenceFragmentCompat { 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     RecyclerView recyclerView = (RecyclerView) getView().findViewById(R.id.list); 
     recyclerView.addItemDecoration(
       new DividerItemDecorationPreferences(
         getActivity(), 
         getResources().getDimensionPixelSize(R.dimen.row_preferences_margin_horizontal), 
         getResources().getDimensionPixelSize(R.dimen.row_preferences_margin_horizontal))); 
    } 

} 

Natürlich können Sie verwenden, was Divider Sie möchten. Was mich betrifft die folgende Klasse verwenden:

public class DividerItemDecorationPreferences extends RecyclerView.ItemDecoration { 

    private Drawable mDivider; 
    private int paddingLeft = 0; 
    private int paddingRight = 0; 

    public DividerItemDecorationPreferences(Context context, int paddingLeft, int paddingRight) { 
       mDivider = ContextCompat.getDrawable(context, R.drawable.divider_recycler_view); 
     this.paddingLeft = paddingLeft; 
     this.paddingRight = paddingRight; 
    } 

    @Override 
    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { 
     int left = paddingLeft; 
     int right = parent.getWidth() - paddingRight; 
     int childCount = parent.getChildCount(); 
     boolean lastIteration = false; 
     for (int i = 0; i < childCount; i++) { 
      if (i == childCount - 1) 
       lastIteration = true; 
      View child = parent.getChildAt(i); 
      if (!lastIteration) { 
       RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); 
       int top = child.getBottom() + params.bottomMargin; 
       int bottom = top + mDivider.getIntrinsicHeight(); 
       mDivider.setBounds(left, top, right, bottom); 
       mDivider.draw(c); 
      } 
     } 
    } 

} 

divider_recycler_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <size android:height="1dp" /> 
    <solid android:color="#1F000000" /> 

</shape> 
Verwandte Themen