2016-02-19 4 views
0

Я работаю над ящиком навигации Я хочу, чтобы он выглядел как тот, что был в Gmail. Но у меня есть некоторые проблемы с кругом с буквой в середине моего TextView. У меня есть андроид: гравитация установлена ​​в центр, но она все еще не совсем посередине.Текст текста TextView Android точно

Немного перемещается на дно и, следовательно, выглядит ужасно.

Я также попытался создать пользовательский вид, но у меня такая же проблема.

Кто-нибудь знает, как это решить?

header.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="300dp" 
    android:layout_height="168dp"> 

    <ImageView 
     android:layout_width="300dp" 
     android:layout_height="168dp" 
     android:src="@mipmap/header_background" 
     android:scaleType="fitXY" 
     android:id="@+id/imageView2" /> 

    <TextView 
     android:layout_width="64dp" 
     android:layout_height="64dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginBottom="8dp" 
     android:layout_above="@+id/subtitle" 
     android:gravity="center" 
     android:text="M" 
     android:textAllCaps="true" 
     android:textSize="48sp" 
     android:textColor="@color/actionbar" 
     android:fontFamily="sans-serif-medium" 
     android:background="@drawable/circle" /> 

    <RelativeLayout 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:layout_alignParentBottom="true" 
     android:id="@+id/subtitle"> 

     <LinearLayout 
      android:layout_centerVertical="true" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 
      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/name" 
       android:text="My Name" 
       android:textSize="14sp" 
       android:textColor="#FFFFFF" 
       android:fontFamily="sans-serif-medium"/> 
      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/name" 
       android:text="[email protected]" 
       android:textColor="#FFFFFF" 
       android:textSize="14sp" 
       android:fontFamily="sans-serif"/> 
     </LinearLayout> 

</RelativeLayout> 

circle.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 

    <solid android:color="@android:color/white"/> 
    <size 
     android:width="64dp" 
     android:height="64dp"/> 
</shape> 

The M is not exactly in the middle

Благодаря

EDIT: Я изменил «center_h «по горизонтали» до «центра», так как это то, что у меня было в моем коде, когда я снял снимок экрана

+0

Я думаю, вы имеете в виду логотип M? Вы, вероятно, не должны использовать текстовое представление для этого, это должно быть изображение. –

+0

@GabeSechan да, я имею в виду M. Если бы это был образ, я должен был сделать много изображений - по одному для каждой буквы. должен быть более эффективный способ. –

+0

Хорошо, я думал, что это был какой-то логотип. Вам может потребоваться перейти к пользовательскому виду, чтобы лучше контролировать чертеж.Рисование текста на самом деле довольно сложно - например, если вы хотите сосредоточиться на чем-то, вы центрируете базовый уровень восхождения или спуска на восхождение? Выберите неправильный, и вы не получите ожидаемого эффекта. –

ответ

0

Вы правы: центрирующий текст внутри TextView не будет правильно центрировать текст. Данный текст всегда немного сдвинут, потому что в верхнюю часть текста добавлено дополнение. Вот почему вам нужно создать настраиваемое представление, настроить объект Paint, а затем правильно разместить текст в своем представлении.

Сначала создайте Paint-объект для измерения текста:

Paint mPaint = new Paint(); 
mPaint.setStyle(Paint.Style.STROKE); 
mPaint.setTextAlign(Paint.Align.CENTER); 
mPaint.setColor(Color.BLUE); 
mPaint.setTextSize(12); 

Затем в вашем OnDraw-методе customView, сделайте следующее:

canvas.drawText(mText, getWidth()/2, getHeight()/2, mPaint); 
+0

Это центрирует текст совершенно горизонтально, но не вертикально –

0

Я думаю, что вы хотите изменить android: textAlignment = «center» и центрируйте текст в текстовом виде, в отличие от центрирования текста внутри его контейнера

+0

это не устраняет проблему ... –

0

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

Итак, проверьте ниже 2 варианта.

1) Постарайтесь увеличить ширину текста или уменьшить ширину круга и проверить.

Если он не работает, вам необходимо применить ниже второго решения.

2) Установите круг в макет, а затем добавьте в него текстовое изображение, как показано ниже.

<RelativeLayout 
     android:layout_width="70dp" 
     android:layout_height="70dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginBottom="8dp" 
     android:layout_above="@+id/subtitle" 
     android:gravity="center" 
     android:background="@drawable/circle" /> 

      <TextView 
       android:layout_width="64dp" 
       android:layout_height="64dp" 
       android:layout_centerInParent="true" 
       android:gravity="center" 
       android:text="M" 
       android:textAllCaps="true" 
       android:textSize="48sp" 
       android:textColor="@color/actionbar" 
       android:fontFamily="sans-serif-medium"/> 
    </RelativeLayout> 
Смежные вопросы