C'est ma première question.La visionneuse hiérarchique fait apparaître les changements de hauteur
j'ai construit un composant personnalisé: un RelativeLayout
avec un TextView
sur le fond et deux ImageView
ci-dessus qui, agissant comme un élément cliquable 2-colonnes d'un histogramme. Pour définir la hauteur d'une barre, je reçois la « hauteur disponible » dans onLayout()
, comme son étiquette moins la hauteur du conteneur:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
mAvailHeight = getHeight()-findViewById(R.id.label).getHeight(); // it works
puis lui attribuer (multiplié par un 0.-1 valeur.) Comme une mise en page paramètre à la ImageView:
View bar = findViewById(R.id.bigBar);
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) bar.getLayoutParams();
rlp.height = Math.round((float)mAvailHeight * mBigBarHeight);
}
le peut être réglé par l'intermédiaire de cette fonction variable mBigBarHeight
(0.-1.):
public void setBigBarHeight(float value, float max) {
mBigBarHeight = value/max;
requestLayout(); //
invalidate(); // do these help? i find no difference
}
maintenant. Lorsque j'ajoute un de ces "HistogramBar" dans onCreate()
et définir les hauteurs et l'étiquette tout fonctionne comme je l'attends. Si j'essaie de les modifier plus tard, dites onClickSomething:
bar.setBigBarHeight(25, 100);
bar.setSmallBarHeight(50, 100);
bar.setLabel("jjk");
seule l'étiquette change. J'ai vérifié avec Hierarchy Viewer et en fait le LayoutParams a changé. Si je clique à nouveau, les changements apparaissent.
Le plus drôle est que même si je ne « Charger Afficher la hiérarchie » de l'outil changements s'affichent (sur l'émulateur) !! Ce qui se produit? Est-ce étrange? Je veux faire ça dans mon code pour que ça marche!
Je n'ai pas trouvé de question similaire. Merci.
une question similaire: http://stackoverflow.com/q/2469466/503900. la réponse ne m'a pas aidé. – bigstones