Как выровнять текст в верхней части TextView?

Как выровнять текст в верхней части TextView?
Эквивалентный API Android для Swings setInsets ()?
То есть верх текста должен начинаться в (0,0) TextView

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:textSize="42sp" android:paddingTop="0px" android:gravity="top"> </TextView> </LinearLayout> 

Я использовал выше фрагмент, но все же вывод не так, как ожидалось
Есть идеи?

Solutions Collecting From Web of "Как выровнять текст в верхней части TextView?"

Таким образом, пространство в верхней части 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(); } } 

Сам фактический шрифт имеет лишние пробелы сверху и снизу, я считаю.

Обычно то, что я делаю, дает отрицательную маржу. Проблема в том, что это выглядит плохо, когда устройства поставляются с разными шрифтами.

 android:layout_marginTop="-5dp" android:layout_marginBottom="-5dp" 

Вам нужно будет отрегулировать размер текста, размер шрифта большего размера потребует более отрицательного заполнения.

В вашем .xml напишите:

 android:gravity="center|top" 

Первый «центр» выравнивает линию горизонтально по центру, а следующий «верх» выравнивается вертикально вверх.

Я думаю, что ваш фрагмент прав. Думаю, вас беспокоят некоторые пиксели между вершиной буквы «T» и верхним краем TextView? Это пространство необходимо для отображения некоторых букв, отсутствующих на английском алфавите.

Проверьте, что ссылки, чтобы получить представление:

Возможно, вам не нужно делать свой взгляд на основе TextView. Попробуйте расширить вид и написать текст в onDraw() .

Посмотрите здесь: https://stackoverflow.com/a/32081250/1263771

Я не уверен, понимаю ли я, что вы имеете в виду, но текст внутри текстового поля будет выровнен по верхней части, если вы используете gravity = top в текстовом представлении.

Если вы поместите цвет backgrund в текст, вы можете увидеть, что происходит …

Я предполагаю, что проблема заключается в том, что textview центрируется, поскольку вы используете fill_parent как по высоте, так и по ширине на родительском LinearLayout. Текстовое представление кажется единственным ребенком, поэтому попробуйте поставить gravity = top на LinearLayout …

Это единственное, что я мог придумать …