Так пространство в верхней части TextView является обивка используется для символов вне английского языка, такие как акценты. Чтобы удалить это пространство, вы можете либо установить атрибут android:includeFontPadding
в false
в свой XML, либо вы можете сделать это программно с помощью функции setIncludeFontPadding(false)
.
Посмотрите на SDK documentation for TextView, если это все еще неясно.
EDITED ОТВЕТ
Если установка атрибута android:includeFontPadding
не выполняет то, что вы пытаетесь сделать, то другое решение переопределить onDraw(Canvas canvas)
метод TextView, который вы используете, так что исключает дополнительные вершины добавление, которое Android добавляет к каждому TextView. После написания моего первоначального ответа я заметил, что по какой-то причине TextView включает дополнительное дополнение в дополнение к заполнению шрифта. Удаление отступов шрифта , а также, поскольку это дополнительное дополнение отлично выравнивает текст в верхней части TextView. Посмотрите на фрагмент кода ниже.
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
Почему это не работает для меня ?! –
Да, это не работает для меня либо – JPM