186 votes

définir la position absolue d'une vue dans Android

Est-il possible de définir la position absolue d’un affichage dans android ? (Je sais qu’il existe une DispositionAbsolue, mais il est obsolète...) Permet de dire j’ai un écran 240x320px, et je veux mettre une ImageView qui est 20x20px avec son centre à la position (100 100). Que dois-je faire ? Merci pour l’aide, cela me rend fou.

279voto

Andy Zhang Points 4671

Vous pouvez utiliser RelativeLayout. Supposons que vous vouliez une ImageView 30 x 40 à la position (50,60) à l’intérieur de votre mise en page. Quelque part dans votre activité :


Autres exemples :

ImageViews lieux deux 30 x 40 (un jaune, un rouge) à (50,60) et (80,90), respectivement :

Lieux un 30 x 40 jaune ImageView à (50,60) et un autre 30 x 40 rouge ImageView relatif à l’ImageView jaune :

16voto

Excrubulent Points 153

Juste pour ajouter à la réponse de Andy Zhang qui précède, si vous le souhaitez, vous pouvez donner param à rl.addView, puis apporter des modifications à elle par la suite, donc :

Pourrait tout aussi bien s’écrire :

Donc si vous conservez la variable params, vous pouvez changer la disposition des iv à tout moment après son ajout à rl.

5voto

Une version plus propre et dynamique sans coder en dur toutes les valeurs de pixels dans le code.

Je voulais position d'une boîte de dialogue (qui, je le gonfler à la volée) exactement au-dessous d'un cliqué sur le bouton.

et résolu de cette façon :

    // get the yoffset of the position where your View has to be placed 
    final int yoffset = < calculate the position of the view >

    // position using top margin
    if(myView.getLayoutParams() instanceof MarginLayoutParams) {
        ((MarginLayoutParams) myView.getLayoutParams()).topMargin = yOffset;
    }

Cependant, vous devez assurez-vous que le parent disposition de l' myView est une instance de l' RelativeLayout.

code plus complet :

    // identify the button
    final Button clickedButton = <... code to find the button here ...>

    // inflate the dialog - the following style preserves xml layout params
    final View floatingDialog = 
        this.getLayoutInflater().inflate(R.layout.floating_dialog,
            this.floatingDialogContainer, false);

    this.floatingDialogContainer.addView(floatingDialog);

    // get the buttons position
    final int[] buttonPos = new int[2];
    clickedButton.getLocationOnScreen(buttonPos);        
    final int yOffset =  buttonPos[1] + clickedButton.getHeight();

    // position using top margin
    if(floatingDialog.getLayoutParams() instanceof MarginLayoutParams) {
        ((MarginLayoutParams) floatingDialog.getLayoutParams()).topMargin = yOffset;
    }

De cette façon, vous pouvez toujours attendre la vue cible pour s'adapter à tous les paramètres de mise en page définie à l'aide de mise en page des fichiers XML, au lieu de coder en dur ces pixels/dps dans votre code Java.

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