216 votes

Comment ajouter par programme des vues à des vues

Disons que j'ai un LinearLayout et que je veux y ajouter une vue, dans mon programme, à partir du code Java. Quelle méthode est utilisée pour cela? Je ne demande pas comment cela se fait en XML, ce que je sais, mais plutôt comment puis-je faire quelque chose dans le sens de

(Une vue) .add (Une autre vue)

Comme on peut le faire dans Swing. Merci d'avance.

293voto

Brian Cooley Points 6094

L'appel de addView est la bonne réponse, mais vous avez besoin de faire un peu plus que cela pour le faire fonctionner.

Si vous créez une Vue par l'intermédiaire d'un constructeur (par exemple, Bouton monbouton = new Bouton();), vous aurez besoin de demander setLayoutParams sur le nouvellement construit en vue, en passant une instance de la vue parent du LayoutParams intérieur de la classe, avant d'ajouter votre nouvellement construit de l'enfant à la vue parent.

Par exemple, vous pourriez avoir le code suivant dans votre fonction onCreate() en supposant que votre LinearLayout a id R. id.principales:

LinearLayout myLayout = findViewById(R.id.main);

Button myButton = new Button(this);
myButton.setLayoutParams(new LinearLayout.LayoutParams(
                                     LinearLayout.LayoutParams.FILL_PARENT,
                                     LinearLayout.LayoutParams.FILL_PARENT));

myLayout.addView(myButton);

Assurez-vous de l'ensemble de la LayoutParams est important. Chaque vue a besoin d'au moins un layout_width et un layout_height paramètre. Aussi obtenir le droit interne de la classe est important. J'ai eu du mal à obtenir des Vues ajoutée à un TableRow pour afficher correctement jusqu'à ce que j'ai compris que je n'étais pas en passant une instance de TableRow.LayoutParams à l'enfant de la vue setLayoutParams.

63voto

ndori Points 69

pour quelqu'un que ça intéresse:

la meilleure façon que j'ai trouvée est d'utiliser le gonfler méthode statique de Vue.

View inflatedView = View.inflate(context, yourViewXML, yourLinearLayout);

où yourViewXML est quelque chose comme R. layout.mavue

veuillez noter que vous avez besoin d'un ViewGroup pour ajouter un point de vue (qui est une mise en page que vous pouvez penser)

ainsi, à titre d'exemple, disons que vous avez un fragment qui-il déjà été gonflé et vous savez que la vue de la racine est une mise en page, et vous voulez ajouter une vue à elle:

        View view = getView(); //returns base view of the fragment
    if ( view == null)
        return;
    if ( !(view instanceof ViewGroup)){
        return;
    }
    ViewGroup viewGroup = (ViewGroup) view;
    View popup = View.inflate(getActivity(), R.layout.someView, viewGroup);

29voto

AndroidOptimist Points 352

C’est tard, mais cela peut aider quelqu'un :) :) Pour ajouter la vue par programmation, essayez comme

 LinearLayout rlmain = new LinearLayout(this);      
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);          
LinearLayout   ll1 = new LinearLayout (this);

ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.logo);              
LinearLayout .LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

iv.setLayoutParams(lp);
ll1.addView(iv);
rlmain.addView(ll1);              
setContentView(rlmain, llp);
 

Cela créera votre vue entière par programme. Vous pouvez ajouter autant de vues que vous le souhaitez. J'espère que cela peut aider. :)

23voto

Klarth Points 1662

LinearLayout est une sous-classe de ViewGroup, qui a une méthode appelée addView. Le addView méthode devrait être ce que vous êtes après.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X