2015-07-21 6 views
1

Dans ma vue personnalisée .xml, j'ai défini la largeur et la hauteur comme w = 600dp , h = 700dp. Maintenant, je sais getMeasuredHeight()/getMeasuredWidth() donner des valeurs de largeur et de hauteur après l'affichage de la vue et ils peuvent différer de ce que j'ai donné dans le fichier .xml, est-il une solution pour obtenir getMeasuredHeight() et getMeasuredWidth() valeurs avant que la vue est réellement dessinée sur la mise en page, sans utiliser de onMeasure()?Comment obtenir la largeur et la hauteur de la vue personnalisée redimensionnée, avant qu'elle soit dessinée

Et comment calculer changé dp tailles dans différents écrans? comme mon 600h*700w lorsqu'il est exécuté sur l'émulateur convertit en 300*300.

Répondre

1

Vous pouvez remplacer onSizeChanged() pour obtenir la hauteur et la largeur de la vue quand il est drawn.refer ci-dessous:

@Override 
protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    mWidth = w; 
    mHeight = h; 
    super.onSizeChanged(w, h, oldw, oldh); 
    Log.d(TAG, "onSizeChanged: " + " width: " + w + " height: " + h + " oldw " + oldw + " oldh " + oldh); 
} 

Pour convertir dp en pixels, vous pouvez utiliser le code suivant:

sizeInPixels = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
      sizeInDp, getResources().getDisplayMetrics()); 
+0

problème est Je ne peux pas obtenir la largeur et la hauteur de la vue en dehors de la classe de vue personnalisée, et si je stocke ces valeurs dans la variable statique de la classe de vue personnalisée, je ne peux pas garantir la taille réelle. onSizechanged va réellement appeler. –

+0

onSizeChanged est appelé sur la mise en page .. Je l'ai utilisé dans toutes mes vues personnalisées –

+0

Dans mon cas particulier, comme mentionné dans ma question, j'essaie d'obtenir la largeur et la hauteur de la vue personnalisée dans l'activité principale. . –