So ist der Platz an der Spitze des Textview-Polsterung für Zeichen außerhalb der englischen Sprache wie Akzente verwendet wird. Um diesen Bereich zu entfernen, können Sie entweder das android:includeFontPadding
-Attribut in Ihrem XML-Code auf false
setzen oder Sie können dies programmgesteuert mit der Funktion setIncludeFontPadding(false)
tun.
Betrachten Sie die SDK documentation for TextView, wenn dies noch unklar ist.
EDITED ANTWORT
die android:includeFontPadding
Attribut Wenn Einstellung erreichen nicht das, was Sie versuchen, die onDraw(Canvas canvas)
Methode der Textview zu tun, ist die andere Lösung außer Kraft zu setzen, die Sie so verwenden, dass sie die zusätzlichen oben beseitigt Padding, die Android zu jedem TextView hinzufügt. Nachdem ich meine ursprüngliche Antwort geschrieben habe, ist mir aufgefallen, dass TextView aus irgendeinem Grund zusätzlich zur Zeichensatzauffüllung eine zusätzliche Auffüllung enthält. Entfernen der Schriftartauffüllung sowie, da diese zusätzliche Auffüllung den Text perfekt an den Anfang der Textansicht ausrichtet. Sehen Sie sich das unten stehende Code-Snippet an.
public class TopAlignedTextView extends TextView {
// Default constructor when inflating from XML file
public TopAlignedTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
// Default constructor override
public TopAlignedTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs);
setIncludeFontPadding(false); //remove the font padding
setGravity(getGravity() | Gravity.TOP); //make sure that the gravity is set to the top
}
/*This is where the magic happens*/
@Override
protected void onDraw(Canvas canvas){
TextPaint textPaint = getPaint();
textPaint.setColor(getCurrentTextColor());
textPaint.drawableState = getDrawableState();
canvas.save();
//converts 5dip into pixels
int additionalPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getContext().getResources().getDisplayMetrics());
//subtracts the additional padding from the top of the canvas that textview draws to in order to align it with the top.
canvas.translate(0, -additionalPadding);
if(getLayout() != null)
getLayout().draw(canvas);
canvas.restore();
}
}
http://code.google.com/p/android/issues/detail?id=8435 :-( – Blundell
Warum funktioniert es nicht für mich ?! –
Ja, das funktioniert nicht für mich entweder – JPM