Vedi my answer here.
È possibile allineare un composto-Disegnabile in alto (o in basso) creando un Drawable personalizzato che avvolge il Drawable e quindi manipola il disegno del Drawable personalizzato sovrascrivendo il metodo onDraw(Canvas)
.
L'esempio seguente è l'esempio più semplice possibile. Questo allinea l'immagine verso l'alto, ma puoi anche farlo allineare in basso, a sinistra oa destra di TextView implementando la logica richiesta nel metodo onDraw(Canvas)
. Potresti anche voler creare un margine nello onDraw(Canvas)
, per rendere perfetto il tuo pixel di implementazione della progettazione.
utilizzo Esempio:
GravityCompoundDrawable gravityDrawable = new GravityCompoundDrawable(innerDrawable);
// NOTE: next 2 lines are important!
innerDrawable.setBounds(0, 0, innerDrawable.getIntrinsicWidth(), innerDrawable.getIntrinsicHeight());
gravityDrawable.setBounds(0, 0, innerDrawable.getIntrinsicWidth(), innerDrawable.getIntrinsicHeight());
mTextView.setCompoundDrawables(gravityDrawable, null, null, null);
codice di esempio:
public class GravityCompoundDrawable extends Drawable {
// inner Drawable
private final Drawable mDrawable;
public GravityCompoundDrawable(Drawable drawable) {
mDrawable = drawable;
}
@Override
public int getIntrinsicWidth() {
return mDrawable.getIntrinsicWidth();
}
@Override
public int getIntrinsicHeight() {
return mDrawable.getIntrinsicHeight();
}
@Override
public void draw(Canvas canvas) {
int halfCanvas= canvas.getHeight()/2;
int halfDrawable = mDrawable.getIntrinsicHeight()/2;
// align to top
canvas.save();
canvas.translate(0, -halfCanvas + halfDrawable);
mDrawable.draw(canvas);
canvas.restore();
}
}
Non semplicemente. Non c'è 'drawableTopLeft'. Quindi, per ottenere ciò che desideri, utilizza un ImageView separato o crea un nuovo controllo che estende TextView. –
utilizza BitmapDrawable.metodo setGravity, assicurati anche che l'altezza dei limiti del drawable sia uguale all'altezza del textview – pskink
@ FrankN.Stein, potresti avere ragione. Potresti per favore dare qualche elaborazione sui controlli personalizzati. – androidcodehunter