0

J'ai la disposition codée personnalisée pour tenir tous les childs. Voici le code:Alignement d'objets dans LinearLayout personnalisé?

public abstract class ItemView extends LinearLayout{ 
    private ImageView icon;//cell icon 
    public static final int iconID=12345; 
    private Button accessorButton;//this will not be button ? 
    public static final int accessorID=54321; 



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

    public void arrange(){ 

    } 
    public void setView(Context context){ 
     int l=super.getLeft(); 
     int r=super.getRight(); 
     int t=super.getTop(); 
     int b=super.getBottom(); 
     icon=new ImageView(context); 
     icon.setImageResource(R.drawable.star); 
     addView(icon); 
     accessorButton=new Button(context); 
     accessorButton.setText("accessor"); 
     addView(accessorButton); 
     // icon.layout(l+5, t+5, l+100, b-5); 
     //accessorButton.layout(r-100, t+5, r-10, b-5); 


    } 


    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 
     // TODO Auto-generated method stub 
     super.onLayout(changed, l, t, r, b); 


    } 


} 

et j'ai mises en page de l'enfant, l'un d'entre eux est:

public class ItemPlainView extends ItemView{ 

    private TextView text; 

    public ItemPlainView(Context context) { 
     super(context); 
     setView(context); 
    } 
    public void setView(Context context){ 
     super.setView(context); 
     text=new TextView(context); 
     text.setText("plain view text"); 
     addView(text); 
    } 

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 
     // TODO Auto-generated method stub 
    super.onLayout(changed, l, t, r, b); 


    } 
    public TextView getText() { 
     return text; 
    } 
    public void setText(TextView text) { 
     this.text = text; 
    } 

    @Override 
    public void arrange() { 
     // TODO Auto-generated method stub 

    } 
} 

Quand je lance le code, il me donne naturellement une icône étoile, un bouton et après un TextView . Je dois remplacer et redimensionner mes objets. Pour cet exemple, je dois mettre l'icône en forme d'étoile sur le côté gauche de TextView et le bouton sur le côté droit. Considérant cette vue hiérarchique, comment puis-je faire cela?

Merci

+1

Je ne comprends pas pourquoi vous n'avez pas la disposition dans un fichier XML? Vous ne pouvez rien faire en XML pour le moment. – dymmeh

+0

Je crée ma mise en page et les vues internes sur le choix, il y en a beaucoup et j'ai besoin de tout paramétrer dans l'exécution. J'ai aussi mis ces mises en page de manière hiérarchique. Je pensais que cela m'apporterait beaucoup de confort de codage – ikbal

Répondre

1

@dymmeh est tout à fait exact, tout ce que vous faites peut être dans votre main.xml comme suit:

a ajouté une autre i @ Steve TextView comme l'a suggéré, vous voulez choisir soit la TextView avant la OR ou TextView & ImageView après la OR

<?xml version="1.0" encoding="utf-8" ?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal"> 

    <TextView 
     android:drawableLeft="@drawable/star" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="plain view text" 
     android:weight="1" 
     /> 

    <<--OR-->> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:drawableLeft="@drawable/star" 
     android:weight="1" 
     /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="plain view text" 
     android:weight="1" 
     /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="accessor" 
     android:weight="1" 
     />  
</LinearLayout> 

puis votre classe Java aurait juste besoin d'appeler setContentView(R.layout.main); dans votre onCreate après super.onCreate();

beaucoup beaucoup plus facile que ce que vous aviez. vous pouvez facilement organiser n'importe lequel de ces éléments comme vous le souhaitez. voir LinearLayout vous pouvez également utiliser TableLayout mais je pense que ce sont trop compliqués pour la plupart des situations.

+0

désolé je n'ai pas vu votre commentaire, vous pouvez toujours tout faire en commençant par le xml et ça va rendre les choses beaucoup plus faciles, qu'est-ce que vous essayez de faire exactement? –

+0

ma disposition linéaire sera un conteneur pour une ligne, et ce qu'il contient sera déterminé complètement au moment de l'exécution. Je ne vois aucune bonté de xml pour cela. Je ne peux pas expliquer exactement ce dont j'ai besoin, mais je peux vous dire que je dois l'écrire en code, merci – ikbal

+0

et je vais vous croire sur parole, j'aimerais pouvoir vous aider, une dernière chose si la seule chose qui change au moment de l'exécution est le contenu mais pas le format ou la mise en page, cela vous épargnerait encore la peine de faire tout cela par programmation, comme cela est fait dans les tutoriels de développeur [ListView] (http://developer.android.com/resources/tutorials/ views/hello-listview.html) pour le format de chaque élément de la liste. –

0

Ceci est beaucoup plus facile en utilisant les mises en page XML. Je suggère simplement d'utiliser cela. Toutefois, si vous avez vraiment besoin de le faire dans le code, vous pouvez définir le paramètre TextView au moyen d'un paramètre de disposition avec un layout_weight = 1.