0
votes

Création de l'interface utilisateur et image de manière programmatique dans Android comme Swift / iOS

Je suis un développeur Swift iOS Apprendre à faire des applications Android. Je me demandais s'il y avait un moyen équivalent pour créer de manière dynamique / programme d'objets d'interface utilisateur dans Android. Dans iOS, je peux simplement

let btn = UIButton() // Create a UI object
btn.frame = CGRect(x: 0, y: 0, width: 100, height: 100) // Set the frame of the object
btn.backgroundColor = UIColor.blue // Mess with the properties of the object
self.view.addSubview(btn) // Add it to a UIView


3 commentaires

Ce n'est pas vraiment la plus grande des idées pour faire de l'interface utilisateur de manière programmatique car elle augmente de manière significative la quantité de code mais cela peut être fait et voici un exemple rapide Stackoverflow.com/questions/3204852/...


Toute raison pour laquelle vous ne voulez pas simplement utiliser des mises en page XML?


Je serais bien accepté ici. Je pense que la création de l'interface utilisateur par programmation dans votre application et sans utiliser XML a beaucoup d'avantages. Pour un, ne pas gonfler XML dans différentes mises en page réduit considérablement les performances de dessin / rendu. Deuxièmement, vous n'ayez pas XML dans votre projet, vous pouvez réduire la taille de votre APK ou de votre format d'apps. Enfin, être capable d'encapsuler la logique qui peut manipuler ces interface utilisateur programmatique rend votre code beaucoup plus propre et beaucoup plus flexible.


3 Réponses :


1
votes

Vous pouvez créer des objets d'interface utilisateur de manière dynamique. Comme: xxx

et ajoutez-le à la disposition comme: xxx

N'oubliez pas que si vous n'avez pas de contexte, vous ne pouvez pas Créez des objets d'interface utilisateur.

Si vous savez comment mettre votre objet UI dans XML, vous apprendrez rapidement d'autres choses en création dynamique)


2 commentaires

merci, comment puis-je modifier de manière dynamique le cadre comme un CGRRECT est Swift


Cela dépend du type de mise en page que vous utilisez. Dans Android, vous pouvez ajouter des marges pour positionner votre vue dans son parent.



1
votes

Vous pouvez créer des objets à partir du code, mais ce n'est pas très conseillé. Le code final est beaucoup plus clair et interprétable s'il est représenté dans le fichier XML. Si vous souhaitez insérer une BOUTOM à partir du code:

Button actionBtn = new Button(this); // Create a UI object
actionBtn.setLayoutParams(new ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)); // Set the frame of the object

actionBtn.setBackgroundColor(getResources().getColor(R.color.blue)); // Mess with the properties of the object
setContentView(actionBtn); // Add it to a UIView


2 commentaires

Salut donc je ne peux pas vraiment mettre le cadre à l'aide de pixels? comme de mon exemple à (0,0100 100 100). Donc, je dois utiliser la mise en page essentiellement pour positionner les choses?


Dans Android, vous devez concevoir pour de nombreux appareils différents. Il n'est donc pas bon d'utiliser des valeurs de pixels codées durement. Cependant, vous pouvez essayer quelque chose comme ActionBTN .getlayOutParams (). Hauteur = 180;



0
votes

Oui! Vous pouvez absolument! En fait, la création de vues et de l'interface utilisateur est de nombreux avantages à Android:

  1. Puisque vous ne gonflez pas et n'utilisez pas de fichiers XML, la performance de rendu devient beaucoup plus rapide et plus performante, en particulier pour une interface utilisateur plus compliquée. LI>
  2. Vos vues et votre UI peuvent maintenant être beaucoup plus flexibles et réutilisables, surtout lorsque vous devez modifier l'interface utilisateur de manière dynamique au moment de l'exécution. LI>
  3. Vous pouvez stocker beaucoup de logique de liaison et de manipulation directement dans une classe de visualisation personnalisée, vous pouvez donc faire des choses telles que myCustomView.updatelabel ("nouvelle étiquette") code> sans avoir à faire des choses comme FOISTVIEWBYID (...) CODE> LI>
  4. Vous pouvez encapsuler votre UI programmatique dans des classes réutilisables, comme celle indiquée ci-dessous: Li> OL>
    class MyCustomView : FrameLayout {
    
        constructor(context: Context) : super(context)
        constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
        constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(
            context, attrs, defStyleAttr
        )
    
        init {
            val button = Button(context)
            val buttonParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
            buttonParams.gravity = Gravity.CENTER
            button.text = "Click Me!"
            button.layoutParams = buttonParams
            this.addView(button)
        }
    }
    


0 commentaires