2012-03-23 2 views
3

Ist es möglich, die Standard-Layouts zu überschreiben, die mit Android bereitgestellt werden? Ist es beispielsweise möglich, den Text für android.R.layout.simple_list_item_checked kleiner zu machen? Oder müsste ich dafür einfach mein eigenes Layout erstellen? Vielen Dank.Ändern Sie den Stil der Standard Android.R.layout Optionen?

Antwort

1

Sie müssen Ihr eigenes Layout erstellen. Um ein benutzerdefiniertes Layout zu erstellen und einen Standardadapter (wie ArrayAdapter) zu verwenden, müssen Sie dieselben IDs in Ihrem benutzerdefinierten Layout wie in den Standardlayouts angeben. Zum Beispiel hat die TextView in simple_list_item_checked die ID "@android: id/text1" (http://www.devdaily.com/java/jwarehouse/android-examples/platforms/android-2/data/res/layout/simple_list_item_checked. xml.shtml). In Ihrem benutzerdefinierten Layout geben Sie diese ID an. Sie müssen also keinen benutzerdefinierten Adapter schreiben. So ist der beste Weg, nur durch Kopieren der Standard-XML-Layout und ändern, was Sie ändern möchten

+1

Danke. Was kann schief gehen, wenn Sie eine andere ID (oder keine ID) als die Standardlayouts geben? Ich kopierte das simple_list_item_checked Layout und entfernte die ID vollständig und es scheint immer noch gut zu funktionieren, wenn ich es so lade: 'ArrayAdapter adapter = neuer ArrayAdapter (Kontext, R.layout.custom_checked_list, arraylist); setListAdapter (adapter); ' – mattboy

+0

Ja, Sie haben Recht, weil das" Layout "== ein TextView. Aber mit anderen Standard-Layouts sollte dies nicht funktionieren .. Ich meine Layouts, die aus mehr als einer Ansicht in einem LayoutManager z. B. LinearLayout vielleicht – 207

+1

+1 guten Punkt von Ihnen. Hatte einen Blick auf Adapter-Implementierung. ArrayAdapter interessiert sich nicht für die ID, wenn der Adapter nicht mit einer textViewResourceId initiiert wurde. Wenn keine Ressourcen-ID angegeben wird, geht der Adapter davon aus, dass die Ressource _whole_ eine TextView ist. Andernfalls sucht der Adapter nach der angegebenen Ressourcen-ID (finViewById) (siehe ArrayAdapter impl https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter.java) – 207

0

Ja, ist es. Hier ist eine ähnliche Sache erreicht wird (res/Werte/styles.xml):

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<style name="ContactLabelTextView"> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:gravity">right</item> 
    <item name="android:textSize">14sp</item> 
    <item name="android:textColor">@android:color/white</item> 
    <item name="android:layout_marginLeft">5dp</item> 
    <item name="android:layout_marginRight">5dp</item> 
    <item name="android:layout_marginTop">5dp</item> 
    </style> 
    <style name="questionTableRow"> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:layout_margin">5dp</item> 
     <item name="android:layout_marginLeft">5dp</item> 
     <item name="android:background">@drawable/textview_border</item> 
    </style> 
</resources> 

Und dann, wenn Sie den Stil auf ein Element in der Layout-Datei anzuwenden, die Sie erstellt haben (main.xml, res /layout/your_custom_layout.xml):

<?xml version="1.0" encoding="utf-8"?> 
    <TableRow 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/questionTableRow" 
     style="@style/questionTableRow" 

Offensichtlich suchen Sie diese mit einem Textview zu erreichen. Ich habe ein Beispiel für meinen eigenen Code angegeben, bei dem textView einen bestimmten Stil erhält. Ich habe diesen textView-Style eigentlich gar nicht angewendet, aber ich habe eingefügt, wo ich einen Stil auf einen tableRow angewendet habe, nur um zu sehen, wie man ihn auf ein xml-Element anwendet.

Macht das, was Sie brauchen?

+0

Danke, aber ich hatte gehofft, nicht meine eigene Layoutdatei erstellen zu müssen, sondern irgendwie android.R.layout.simple_list_item_checked zu erben und dann nur die bestimmten Werte zu überschreiben, die ich ändern möchte (in diesem Fall die Textgröße), aber in diesem Beispiel Sie haben Ihre eigenen Stile von Grund auf neu erstellt. Bis jetzt sieht es so aus, als ob Sie die Standard-Layouts in android.R.layout nicht direkt ändern können, Sie müssen Ihre Version davon wie von 207 geschrieben erstellen. – mattboy