2010-12-15 24 views
2

Je suis nouveau sur le développement Android, et j'ai du mal à travailler sur quelque chose. Je veux créer une vue composite (appelée SkillDiceGroup) d'un TextView, EditText et SkillDiceButton (qui est une extension de la classe Button). Je l'ai travail lors de la déclaration de mon SkillDiceGroup code pur, et de mettre cela dans ma mise en page XML:Android Composite XML View

<com.jeremybush.d20.SkillDiceGroup android:id="@+id/skillDiceTest" 
    android:title="Foobar!" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    </com.jeremybush.d20.SkillDiceGroup> 

Et je ce code:

public class SkillDiceGroup extends LinearLayout 
{ 
// The View components 
private TextView mTitle; 
private EditText mSkill; 
private SkillDiceButton mDice; 

public SkillDiceGroup(Context context, AttributeSet attrs) 
{ 
    super(context); 

    this.setOrientation(HORIZONTAL); 

    mTitle = new TextView(context); 
     mTitle.setText("foobar"); 
    addView(mTitle, new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT 
)); 

    mSkill = new EditText(context); 
    addView(mSkill, new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT 
)); 

    mDice = new SkillDiceButton(context, attrs); 
    mDice.setText("d20"); 
    addView(mDice, new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT 
)); 
} 

private class SkillDiceButton extends DiceButton 
{ 
    public SkillDiceButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    public void onClick(View view) 
    { 
    modifier = Integer.parseInt(mSkill.getText().toString()); 

    super.onClick(view); 
    } 
} 
} 

Cela fonctionne comme je le veux, mais je tiens à déclarer les trois éléments dans la vue xml de leur propre chef. Comment puis-je faire ceci?

Répondre

1

Vous devriez jeter un oeil à la vaste documention Android fournit des mises en page en ce qui concerne XML, par exemple: declaring layout, common layout objects et hello views qui a un exemple détaillé de chaque type de mise en page.

prises directement à partir du tutoriel LinearLayout, une mise en page avec 3 articles:

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_weight="1"> 
    <TextView 
     android:text="row one" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    <TextView 
     android:text="row two" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    <TextView 
     android:text="row three" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    <TextView 
     android:text="row four" 
     android:textSize="15pt" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 
    </LinearLayout> 

Il suffit de remplacer les deuxième deux vues de texte avec un EditText et un SkillDiceButton.

+0

J'ai lu la documentation, mais je ne suis pas sûr que cet exemple est tout à fait la même chose. Remarquez à la fin de mon code, j'ai l'affectation de modificateur où je fais référence à la variable mSkill. En raison de la logique dont j'ai besoin, je ne pense pas que votre exemple soit une traduction directe. Je pourrais être (et probablement suis) mal cependant. – zombor

+0

Toute logique doit être dans votre classe d'activité, pas votre classe d'affichage. Vous pouvez accéder aux éléments de votre mise en page par identifiant si vous souhaitez afficher leur texte ou ajouter des clics d'écoute. Il pourrait vous aider à travailler sur l'un des exemples complets, comme le didacticiel sur le bloc-notes: http://developer.android.com/guide/tutorials/notepad/index.html, pour voir comment tout est censé s'intégrer. –

+0

C'est la bonne façon de procéder, si vos vues personnalisées ont besoin de leurs propres attributs supplémentaires, vous pouvez également ajouter vos propres xmlns. Le widget du panneau dans ce projet a un exemple de comment ajouter vos propres attributs. http://code.google.com/p/android-misc-widgets/ vous pouvez également utiliser findViewById pour obtenir une référence à vos vues personnalisées dans votre activité et définir manuellement des attributs supplémentaires. Aucune des deux solutions ne serait erronée. – schwiz

0

Si vous wan't pour créer votre propre point de vue/widget structure de mise en page interne « peaux », et peut être réutilisable dans divers endroits - vous devriez lire le document sur les creating custom components

lire aussi sur l'étiquette, et LayoutInflater

Mais si vous voulez utiliser SkillDiceGroup une seule fois - juste créer une mise en page comme proposé par Mayra

+0

Juste, comme je l'ai dit dans l'autre commentaire, je vais réutiliser cette chose 15-20 fois. – zombor