ajout dynamique de vue à l'aide de WindowManager.addView
J'ai un code sur ICS pour les tablettes. Je veux ajouter une Imageview dynamicly à un fragment. Le fragment contient déjà preferencelist. Le code pour l'ajout de la vue dynamiquement est comme suit. Je suis codage de cette fonctionnalité de glisser-déposer. La présente partie du code est pris à partir de TouchInterceptor.java de fichiers à partir de android app musique.
mWindowParams = new WindowManager.LayoutParams();
mWindowParams.gravity = Gravity.TOP ;
mWindowParams.x = 0;
mWindowParams.y = y
mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
mWindowParams.format = PixelFormat.TRANSLUCENT;
mWindowParams.windowAnimations = 0;
ImageView v = new ImageView(mContext);
int backGroundColor = mContext.getResources().getColor(R.color.bg_background);
v.setBackgroundColor(backGroundColor);
v.setImageBitmap(bm);
mWindowManager = (WindowManager)mContext.getSystemService("window");
mWindowManager.addView(v, mWindowParams);
Je spécifie la coordonnée x de windowlayout param 0. Eventthen lorsque la vue est affiché , itstead d'afficher, à partir de la gauche du fragment(volet de droite) ,la vue est affichée à partir du milieu du volet de droite et est étendant vers le volet de droite . Ce que je fais de mal ? Quoi de a à faire pour corriger cela ?
OriginalL'auteur jkv | 2012-03-13
Vous devez vous connecter pour publier un commentaire.
Essayez de définir la gravité de
Gravity.TOP | Gravity.LEFT
OriginalL'auteur james
Je travaille exatly sur le même code de l'ancien Google Musique de l'open source du projet.
Comme vous je suppose, j'ai eu un
TouchInterceptor
dans un fragment. Mon problème était que le fragment ne prend pas toute la largeur de l'écran, il a un autre fragment sur sa gauche.J'ai essayé beaucoup à l'aide de
mWindowParams.gravity
être capable de spécifier une absolue x,y, mais je ne pouvais pas trouver une solution. Finalement, j'ai résolu avecmWindowParams.horizontalMargin
.Voici le code, je suis venu avec:
La partie que j'ai ajouté est:
Ce paramètre
mWindowParams.horizontalMargin
spécifier la marge de la fenêtre de l'précisé la gravité de côté (Gravity.Left
) en % € [0,1].Donc, avec
getAbsoluteLeft()
je vais à la Vue de l'arbre pour obtenir la distance absolue de la liste à partir de la gauche.Le diviser par la largeur de la fenêtre, vous obtenez un pourcentage de marge dont vous avez besoin.
OriginalL'auteur Mario Lenci