Ho una personalizzazione View
. Nel costruttore per la vista, creo e aggiungo due sottoview. Tuttavia, l'utilizzo di LayoutParams.addRule()
sta causando alcuni problemi. Regole quali CENTER_HORIZONTAL
lavoro, ma quando provo ad usare ABOVE
, la visualizzazione secondaria finisce con un'altezza di 0.L'aggiunta programmatica di SOPRA a LayoutParams causa l'altezza di visualizzazione da 0
Ecco il codice nel mio costruttore:
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
mLayoutParams = new LayoutParams(width, height);
mLayoutParams.leftMargin = left;
mLayoutParams.topMargin = top;
mImage = new ImageView(getContext());
mImage.setImageDrawable(getResources().getDrawable(R.drawable.my_image_drawable));
mImage.setScaleType(ScaleType.FIT_XY);
mImage.setId(R.id.my_image_id);
addView(mImage, mLayoutParams);
mText = new TextView(getContext());
mText.setText(R.string.my_text);
mText.setId(R.id.my_text_id);
LayoutParams textParams = new LayoutParams(200, 40);
// textParams.addRule(CENTER_HORIZONTAL, TRUE); //Works
textParams.addRule(ABOVE, mImage.getId()); //Doesn't work
addView(mText, textParams);
Se ispezionare la vista su un emulatore con Device Monitor, posso vedere che il layout_height
del testo è 40, ma i parametri in alto, in basso e in altezza sono tutti 0. measuredHeight
sembra essere uguale alla larghezza dello schermo.
- Sto facendo qualcosa di sbagliato con l'aggiunta delle regole?
- C'è un posto migliore per aggiungere le regole? Qualcosa deve succedere prima?
- Altre eventuali alternative? Rendere il
TextView
un'altezza di FILL_PARENT, gravità BOTTOM e impostare il margine inferiore all'altezza dell'immagine funziona, ma ho bisogno di essere in grado di aggiungere un'altra vista sopra il testo, e questo non funzionerà per quello.
Prova ad aggiungere una regola per il tuo 'Immagine' da' Sotto' il tuo 'TextView'. Quando le cose vengono aggiunte a un 'RelativeLayout' vengono aggiunte in alto a sinistra se non diversamente specificato. Penso che quello che potrebbe accadere è che non c'è posto sopra il tuo 'Image' per' TextView' per andare – codeMagic
Ah, scusa, mi è mancato nel mio codice. 'mLayoutParams' ha una sinistra, una cima, una larghezza e un'altezza definite. Non dovrebbe essere sufficiente per sapere dove andare? @codeMagic, ho aggiornato il codice. – karl
L'aggiunta di 'ALIGN_BOTTOM' a' mImage' non cambia nulla. Se lo cambio a 'BELOW', invece, ottengo un errore di dipendenza circolare. Voglio che il testo sia sopra l'immagine e l'immagine abbia una posizione fissa. – karl