2011-04-21 2 views
3

Je suis en train de créer une mise en page personnalisée pour Android. Il dessine normalement sur l'écran, mais sans les vues internes. Dessine uniquement mon fichier group_box.xml. Comment puis-je accéder à partir de ma mise en page personnalisée aux vues internes (TextView avec test d'identité) ou comment les dessiner?Mise en page personnalisée basée sur la mise en page existé

main.xml

<my.example.GroupBox 
      android:layout_width="match_parent" 
      android:layout_height="40sp"> 
     <TextView android:text="TEST" 
        android:id="@+id/test" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"/> 
    </my.example.GroupBox> 

group_box.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       style="@style/groupbox"> 
    <LinearLayout style="@style/groupboxContent" 
        android:id="@+id/content" 
        android:layout_height="match_parent" 
        android:layout_width="match_parent"/> 
    <TextView style="@style/groupboxLabel" 
       android:id="@+id/caption" 
       android:text="@string/visit"/> 
</RelativeLayout> 

GroupBox.java

public class GroupBox extends LinearLayout { 

    public GroupBox(Context context) { 
     super(context); 
     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view = layoutInflater.inflate(R.layout.group_box, this); 
    } 

    public GroupBox(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view = layoutInflater.inflate(R.layout.group_box, this); 
    } 
} 

Répondre

6

vous pouvez accéder aux éléments via setters et getters.

mettre ceci dans votre GroupBox.java

caption = (TextView) findViewById(R.id.caption); 

public void setLabel(CharSequence text) { 
     caption.setText(text); 
    } 

ajouter un identifiant à votre contrôle xml:

<my.example.GroupBox 
      android:layout_width="match_parent" 
      android:layout_height="40sp" 
android:id="mycontrol"> 
     <TextView android:text="TEST" 
        android:id="@+id/test" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"/> 
    </my.example.GroupBox> 

puis trouver votre contrôle dans l'activité principale et faire ceci:

yourcontrol = (GroupBox) findViewById(R.id.mycontrol) 

yourcontrol.setLabel("test"); 
+0

Vous ne me comprenez pas complètement. Je veux placer des vues à l'intérieur de TextView avec le test d'id dans LinearLayout avec le contenu d'id dans group_box.xml, et je veux le faire par xml pas du code comme dans votre exemple avec la légende. Merci –

+1

ok sry. vous ne pouvez pas mettre cette vue dans et y accéder dans la classe GroupBox. Vous pouvez simplement accéder à partir de la vue ou de l'activité qui gonfle le fichier main.xml. pensez à: vous pouvez ajouter le à d'autres dispositions. Si vous accédez dans GroupBox à une vue que vous n'avez pas ajoutée au XML, vous obtiendrez une exception NullPointerException. – passsy

+0

Mais comment Android fait cela dans LinearLayout ou toute autre mise en page? –

Questions connexes