2016-06-28 20 views
1

ich die SettingsActivity von Android Studio (New, Aktivität, Einstellungen Aktivität) erzeugt verwenden, die auf AppCompatDelegate beruht. Ich habe es gelungen, eine Symbolleiste hinzufügen und einen benutzerdefinierten Teiler zur Listenansicht für displayer Präferenz-Header verwendet, um wie folgt festgelegt:Customizing Präferenz Header Layout

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    LinearLayout root = 
      (LinearLayout) findViewById(android.R.id.list).getParent().getParent().getParent(); 
    Toolbar toolbar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.toolbar, root, false); 
    root.addView(toolbar, 0); 
    toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 

    ListView listView = getListView(); 
    listView.setDivider(ContextCompat.getDrawable(this, R.drawable.settings_divider)); 
    listView.setDividerHeight(1); 

    setupActionBar(); 
} 

aber ich kann nicht herausfinden, wie die Polsterung zu jedem Listview-Elemente assocatied zu erhöhen weder zu Vergrößern Sie den Abstand zwischen dem Symbol und dem Präferenztitel. Ist es möglich, Stile zu verwenden oder ein benutzerdefiniertes Layout zu übergeben?

enter image description here

Antwort

1

können Sie eine benutzerdefinierte Layout erstellen, die PreferenceCategory außer Kraft setzt. Zum Beispiel wie folgt aus:

public class CustomPreferenceCategory extends PreferenceCategory { 

    public CustomPreferenceCategory(Context context) { 
     super(context); 
    } 

    public CustomPreferenceCategory(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomPreferenceCategory(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected View onCreateView(ViewGroup parent) { 
     View view = super.onCreateView(parent); 

     return view; 
    } 

    @Override 
    public View getView(View convertView, ViewGroup parent) { 
     final View view = super.getView(convertView, parent); 
     view.setPadding(view.getPaddingLeft(), view.getPaddingTop()*2, view.getPaddingRight(), 10); 

     TextView textView = (TextView) view.findViewById(android.R.id.title); 
     textView.setGravity(Gravity.BOTTOM); 

     return view; 
    } 
} 

Durch diese Methoden überschreiben (und einige mehr, wenn Sie möchten, dass Sie eine Polsterung, Marge, Hintergrundfarbe festlegen, etc ...

Dann CustomPreferenceCategory anstelle von PreferenceCategory

Natürlich können Sie das gleiche mit einer Preference tun (Ich war mir nicht sicher, ob Sie benutzerdefinierte Header oder benutzerdefinierte Listenelemente wollen - die Kategorie wird die Kopfzeile und die Präferenz ist eine normale Liste)