0

У меня есть RecyclerView в моем приложении. Ниже приведен XML-код его строки:Текст центра в TextView строки RecyclerView

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="48dp"> 

    <TextView 
     android:paddingLeft="-1.5dp" 
     android:paddingTop="-1.5dp" 
     android:textColor="#fff" 
     android:id="@+id/text_with_icon" 
     android:layout_gravity="center_vertical" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:text="A" 
     android:textAlignment="center" 
     android:textSize="22sp" 
     android:gravity="center" 
     android:background="@drawable/circle" 
     android:layout_marginLeft="18dp" 
     android:layout_marginStart="18dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:textColor="#000" 
     android:gravity="center_vertical" 
     android:textSize="16sp" 
     android:textStyle="bold" 
     android:layout_gravity="left|top" 
     android:id="@+id/list_title" 
     android:layout_marginLeft="72dp" 
     android:padding="4dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Dummy text" 
     android:layout_marginStart="72dp" 
     android:layout_toRightOf="@+id/text_with_icon" /> 

    <TextView 
     android:id="@+id/description" 
     android:layout_width="wrap_content" 
     android:layout_height="14dp" 
     android:layout_marginLeft="77dp" 
     android:textStyle="normal" 
     android:textColor="#000" 
     android:textSize="12sp" 
     android:gravity="center_vertical" 
     android:text="Lorem ipsum dolor sit amet, consectetur..." 
     android:layout_alignLeft="@+id/list_title" 
     android:layout_alignStart="@+id/list_title" 
     android:layout_alignParentBottom="true" 
     android:layout_gravity="left|bottom" 
     android:layout_marginBottom="8dp"/> 
</FrameLayout> 

Андроида студии предварительного просмотра показывает, что она выглядит как на следующем скриншоте: custom row template

Итак, это выглядит как буква в красном круге хорошо центрируется и вот первая проблема. На скриншоте из эмулятора легко заметить, что все буквы в этих кругах не находятся в центре. Как я могу сосредоточить их? Emulator screenshot

И теперь вторая проблема. В скриншоте эмулятора, если вы посмотрите на третий элемент списка («Something3»), у него нет текстового текста ниже текста, выделенного полужирным шрифтом. Возможно ли вертикально центрировать его в строке, если нет описания? Круги в списке фоны в TextView и формы в отдельном файле XML (circle.xml):

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid android:color="@color/primary"/> 
</shape> 
+0

использования 'LinearLayout', затем' gravity', затем центрируйте verticall, затем поймайте текст текстового поля, если он пуст, вы установили его на видимость. 'RelativeLayout' также будет работать с центром в родительском объекте. (Я ссылаюсь на текстовые просмотры справа) – Elltz

+0

Боюсь, я не понял ... Сначала я попробовал Linear Layout, но не смог добиться соответствующего позиционирования элементов. Затем я попробовал Relative Layout, и все элементы сошли с ума и были беспорядочно ранены, и мне не удалось позиционировать их нормально. Рамка была единственной, на которой я мог бы позиционировать элементы с помощью: (Не могли бы вы объяснить свой ответ в нескольких словах, пожалуйста? –

ответ

1

здесь, тем больше слова, посмотрите на TextView с идентификатором android:id="@+id/description" и проверить его Visiblity, значение gone если вы установили его в visible, то оба игрока TextView были в центре, но если gone ваш выше TextView всегда на высоте, как вы видите .. и магия продолжается с Gravity .. (Я имею в виду к этому раствору)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

<TextView 
    android:id="@+id/text_with_icon" 
    android:layout_width="40dp" 
    android:layout_height="40dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentTop="true" 
    android:layout_gravity="center_vertical" 
    android:layout_marginLeft="18dp" 
    android:layout_marginStart="18dp" 
    android:background="@drawable/circle" 
    android:gravity="center" 
    android:paddingLeft="-1.5dp" 
    android:paddingTop="-1.5dp" 
    android:text="A" 
    android:textColor="#fff" 
    android:textSize="22sp" /> 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:gravity="center_vertical" 
    android:layout_toRightOf="@+id/text_with_icon" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/list_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="4dp" 
     android:text="Dummy text" 
     android:textColor="#000" 
     android:textSize="16sp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/description" 
     android:layout_width="wrap_content" 
     android:layout_height="14dp" 
     android:text="Lorem ipsum dolor sit amet, consectetur..." 
     android:textColor="#000" 
     android:visibility="gone" 
     android:textSize="12sp" 
     android:textStyle="normal" /> 
</LinearLayout> 

в вашем getView() или Java стороны, проверить, если строка пуста или не так

if(!TextView.getText().toString().isEmpty()){ // if it is not empty 
    TextView.setVisibility(0); // zero means visible.. 
} 

если вы ориентируетесь ниже API 9, положить это в, если заявление TextView.getText().toString().length() != 0

Смежные вопросы