Android obtenir Fragment de largeur
J'ai une mise en page avec les 3 fragments:
<LinearLayout android:id="@+id/acciones"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/fragment1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</LinearLayout>
<LinearLayout
android:id="@+id/fragment2"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:id="@+id/f3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</LinearLayout>
</LinearLayout>
Dans le premier fragment, j'ai un TableLayout en qui j'ai une custom TextView dans chaque ligne.
Je veux savoir la largeur du fragment, parce que si la coutume TextView est plus large que le fragment, je vais définir le nombre de lignes nécessaires.
C'est ce que j'ai fait dans ma personnalisé TextView:
@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mMaxWidth = (float) (getMeasuredWidth());
}
Avec cette ligne j'ai eu la largeur de trois Fragments, non seulement celui qui contient la coutume TextView.
Grâce.
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en mesure de définir la largeur de la TextView être fill_parent, dans ce cas, elle ne l'emballage pour vous. Vous ne devez pas définir la largeur de vos mises en page match_parent car il est inefficace lorsque vous utilisez la mise en page de poids.
Depuis android du système de mise en page est parfois mystérieux en ce qui concerne la vue de la taille, si le réglage de la TextView largeur à fill_parent en fait prend tout l'écran (comme votre question semble être ce qui implique) procédez de la manière suivante:
Définir votre TextView largeur à 0 par défaut. Dans le onCreate de votre activité, après le réglage de l'affichage du contenu:
En définissant le TextView de la largeur de 0 au départ, vous empêcher de modifier les largeurs des fragments. Ensuite, vous pouvez utiliser une arborescence de l'observateur pour obtenir la largeur de ce fragment qui vous intéresse (en regardant sa vue de la racine) après la disposition a eu lieu. Enfin, vous pouvez définir votre TextView être que la largeur exacte, qui à son tour fera l'emballage pour vous automatiquement.
Noter que onGlobalLayout peut être appelée plusieurs fois et est régulièrement appelé avant que tous les points de vue ont été entièrement aménagé, d'où la != 0 vérifiez. Vous aurez aussi probablement envie de faire une sorte de assurez-vous que vous ne réglez la largeur de l'affichage de texte une fois, ou sinon, vous pouvez obtenir en une infinité de mise en boucle (pas la fin du monde, mais pas bon pour la performance).