Подтвердить что ты не робот

Как выровнять текст в верхней части 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> 

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

android:gravity="center|top"

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

Ответ 4

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

Посмотрите здесь: fooobar.com/questions/43787/...

Ответ 5

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

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

Ответ 6

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

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

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

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