11
votes

Placez la vue à l'intérieur de Framelayout à Android

Je veux ajouter une vue à l'intérieur d'un Framelayout de manière programmatique et de le placer dans un point spécifique dans la disposition avec une largeur et une hauteur spécifiques. Framelayout soutient-il cela? Sinon, devrais-je utiliser un groupe de visiteurs intermédiaire pour y parvenir? XXX

Mon idée initiale consistait à ajouter un Absolutelayout à la FrameLayout et à placer la vue à l'intérieur de l'absolutelayout. Malheureusement, je viens de découvrir que l'absolutelayout est obsolète.

Tous les pointeurs seront très appréciés. Merci.


1 commentaires

Avez-vous résolu ce problème? Je suis intéressé par une solution non-absoluelleout :)


5 Réponses :


0
votes

Le fil ici sur Stackoverflow à

Comment setlayoutParams () pour une vision imageView? < / p>

couvre quelque peu.

Par exemple: Linearlayout.layoutparams layoutParams = nouveau linearlayout.layoutparams (30, 30); YourImageView.setlayOutParams (LayOutParams);

implique que vous devez définir un objet linearlayout.layoutparams (ou dans votre cas un objet FramelayOnt.LayOutParams) à passer à la méthode SetLayOntParams de votre objet V.

à

http://developer.android.com/reference/android/widget /Framelayout.html

Cela fait presque on dirait que vous pouvez demander à votre V de:

GénérateurFaultLayOutparams () via cette méthode si vous n'avez pas défini les paramètres spécifiquement.

Mais il est tard et ces liens font saigner mes yeux un peu. Laissez-moi savoir s'ils nouent: -)


0 commentaires

1
votes

du lien Quinn1000 fourni:

Vous pouvez ajouter plusieurs enfants à un Framelayout, mais tous les enfants sont classés en haut à gauche de l'écran.

Cela signifie que vous ne pouvez pas mettre votre vue à un point spécifique à l'intérieur de Framelayout (sauf que vous voulez que ce soit dans le coin supérieur gauche: -)).

Si vous avez besoin du positionnement absolu de la vue, essayez le Absolutelayout :

Une disposition qui vous permet de spécifier des emplacements exacts (coordonnées X / Y) de ses enfants. Les mises en page absolues sont moins flexibles et plus difficiles à entretenir que d'autres types de mises en page sans positionnement absolu.

En ce qui concerne le réglage de la largeur et de la hauteur de la vue, il s'agissait également de Quinn1000 dit, vous fournissez la méthode v.setlayoutparams () A layoutParams objet, en fonction du conteneur que vous avez choisi (Absolutelayout, linearlayout, etc.)


4 commentaires

Malheureusement, Absolutelayout est obsolète.


Tu as raison. J'ai raté que lorsque j'ai regardé l'API plus tôt. Je suppose que vous pourriez jouer avec la marge-gauche / haut pour votre vue à l'intérieur d'un Framelayout pour obtenir une expérience similaire à l'Absolutelayout.


Comment puis-je le faire par programme?


Jetez un coup d'œil à l'API pour le framelayout.layoutparams (lien est dans ma réponse): il étend les marginlayoutorparams qui fournit une méthode «SetMargins».



2
votes

Il est vrai qu'avec Framelayout, tous les enfants sont classés en haut à gauche de l'écran, mais vous avez toujours un certain contrôle avec la fixation de leur rembourrage. Si vous définissez différentes valeurs de rembourrage sur différents enfants, ils apparaîtront à différents endroits de la Framelayout.


1 commentaires

Mais le problème avec ceci est que ClickListeners couvrira toute la zone à partir du coin supérieur gauche ...



12
votes

L'exemple suivant (code de travail) montre comment placer une vue (editext) à l'intérieur d'un Framelayout. Il montre également comment définir la position de l'EditText à l'aide de la sécheuse Setpadding de Framelayout (chaque fois que l'utilisateur clique sur le Framelayout, la position de l'editext est définie sur la position du clic):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <FrameLayout 
        android:id="@+id/frameLayout1" 
        android:layout_height="fill_parent" android:layout_width="fill_parent">
    </FrameLayout>

</LinearLayout>


2 commentaires

Comment est-ce lié à la question?


Eh bien .. c'est une vue à l'intérieur d'un Framelayout n'est-ce pas? De plus, je montre comment positionner la vue intégrée dans un endroit spécifique à l'aide du setter Setpadding.



3
votes

Vous pouvez également ajouter une marge autour de la vue nouvellement ajoutée pour la positionner à l'intérieur du Framelayout.

FrameLayout frameLayout = (FrameLayout) findViewById(R.id.main); // or some other R.id.xxx
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(0, metrics.heightPixels - 20, 0, 0);
View v = new View(context);
v.setLayoutParams(params);
frameLayout.addView(v);


1 commentaires

1) Qu'est-ce que la largeur? d'où est ce que ça vient? 2) métrique.Width n'existe pas, sa métrique.WidthPixels. 3) Cela ne fonctionne pas, et si cela le ferait, cela ne le ferait toujours pas parce que vous n'ajoutez pas v nulle part ...