【问题标题】:Center text in the TextView of a RecyclerView row在 RecyclerView 行的 TextView 中居中文本
【发布时间】:2015-03-23 17:32:01
【问题描述】:

我的应用中有一个 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>

【问题讨论】:

  • 使用LinearLayout 然后gravity 然后垂直居中,然后捕获文本视图的文本,如果它是空的,你将它设置为可见性消失了。RelativeLayout 也将与父中心的中心一起使用..(我指的是右边的文本视图)
  • 恐怕我没看懂……我先尝试过Linear Layout,但无法实现元素的合适定位。然后我尝试了相对布局,所有元素都变得疯狂并随机定位,我没有成功正常定位它们。框架布局是我唯一可以用来定位元素的布局:(您能用更多的话解释一下您的答案吗?

标签: android xml material-design android-recyclerview


【解决方案1】:

这里是更多单词,查看TextView id android:id="@+id/description" 并检查其Visiblity,如果您将其设置为visible,则设置为gone 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

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 2012-04-18
    相关资源
    最近更新 更多