2010-10-09 8 views
2

Existe-t-il une possibilité d'ajouter une vue ou un dérivé (bouton, textview, imageview etc ...) à une autre vue sans avoir à passer par des mises en page?Ajout de vues à une autre vue

J'ai une classe appelée ScreenView, elle dérive de View (par exemple, public class ScreenView extends View). Je voulais afficher du texte, des étiquettes, des images, etc.

Sur un iPhone c'est trivial, il suffit de créer mes objets et d'utiliser la méthode addSubview; vous pouvez intégrer des objets d'interface utilisateur dans un autre. La plupart des kits d'outils de l'interface utilisateur fonctionnent également de cette manière.

Problème avec les mises en page est que je n'ai pas trouvé un moyen facile de positionner correctement une sous-vue (disons une vue de texte) dans un emplacement donné de la vue englobante. Je voulais que l'un contienne l'autre ...

J'espérais avoir manqué quelque chose dans la documentation (ce qui est loin d'être intuitif c'est certain) et je pourrais faire quelque chose comme myView.addView (subview). Mais ce n'est pas le cas :)

Comme une question parallèle, quel est le plus proche de UILabel de l'iPhone dans le monde Android? Un UILabel peut contenir un texte ou un graphique. En ce moment j'utilise TextView et ImageView mais ils ne sont nulle part aussi flexible quand il s'agit de mise en page comme un UILabel

Editer: Rendre ma vue hériter de ViewGoup à la place, laissez-moi ajouter sous-vue .. Cependant, je vouloir dessiner à mon avis. J'ai trouvé que lorsque ScreenView étend ViewGroup, la fonction onDraw n'est jamais appelée alors.

Quelque chose comme:

 @Override 
     protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 

      Paint paint = new Paint(); 
      paint.setStyle(Paint.Style.FILL); 

      // make the entire canvas yellow 
      paint.setColor(Color.YELLOW); 
      canvas.drawPaint(paint); 
} 

peindrais à mon avis jaune s'étend ScreenView Vue; mais pas si elle étend ViewGroup.

Comment dessiner directement dans la vue alors?

Merci JY

+0

On dirait que la classe ViewGroup ferait l'affaire .. – jyavenard

Répondre

0

Après avoir fait hériter ma classe de RelativeLayout à la place, elle dessine mes sous-vues. GroupView ne dessine rien par défaut et onLayout doit être entièrement écrit. Sans documentation à ce sujet, ça va être difficile à faire.

OnDraw n'est pas appelé par défaut, il est appelé si vous définissez la couleur d'arrière-plan ou si vous ajoutez un élément pouvant être dessiné.

Sinon, vous devez dessiner pendant dispatchDraw à la place.

2

Utilisez un ViewGroup, c'est ce qu'ils sont pour. Et puis vous pouvez appeler addView() :)

+0

Oui, j'ai vu cela peu de temps après que j'ai posté .. – jyavenard

+0

Cependant, j'ai trouvé que onDraw n'est pas appelé avec. Il a certainement été appelé lorsque ma classe héritait de la classe View – jyavenard

+1

ViewGroups ne dessine pas par défaut, vous devez appeler setWillNotDraw (false) quelque part. Vous pouvez également utiliser dispatchDraw(). –

Questions connexes