Таким образом, пространство в верхней части TextView заполнено символами за пределами английского языка, такими как ударения. Чтобы удалить это пространство, вы можете либо установить атрибут android:includeFontPadding
на false
в своем XML, либо вы можете сделать это программно с помощью функции setIncludeFontPadding(false)
.
Посмотрите документацию SDK для TextView , если это все еще неясно.
Отредактированный ответ
Если установка атрибута 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();
}
}