RecyclerView 行的 TextView 中的居中文本

Center text in the TextView of a RecyclerView row

我的应用程序中有一个 RecyclerView。下面是其行的 xml 代码:

<?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>

Android Studio 预览显示如下屏幕截图所示:

所以,看起来红圈中的字母是居中的,第一个问题来了。在模拟器的屏幕截图中,很容易注意到那些圆圈中的所有字母都不在中心。我怎样才能让他们居中?

现在是第二期。在模拟器屏幕截图中,如果您查看列表的第三项 ("Something3"),它在粗体文本下方没有描述文本。如果没有描述,是否可以在行中垂直居中? 列表中的圆圈是文本视图的背景,并且是单独 xml 文件中的形状 (circle.xml):

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

这里是 more words,查看 ID 为 android:id="@+id/description"TextView 并检查其 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,请将其放入 if 语句中 TextView.getText().toString().length() != 0