【问题标题】:RelativeLayout textviews overlappingRelativeLayout 文本视图重叠
【发布时间】:2020-05-12 15:46:35
【问题描述】:

我有一个相当简单的 ListView 行:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
    android:id="@+id/tournament_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:textSize="25dp" />

<TextView
    android:id="@+id/tournament_winner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:textSize="25dp" />

</RelativeLayout>

"@+id/tournament_name" 的文本很长时 - 它与来自"@+id/tournament_winner" 的文本重叠,我不明白为什么。

我尝试使用android:singleLine="false"无济于事。我也尝试使用android:inputType="textMultiLine",因为文档说android:singleLine="false" 已弃用,但随后我收到警告:Attribute android:inputType should not be used with <TextView>: Change element type to <EditText> ? 所以这里也不好。

我也尝试过使用android:ellipsize="end",但这不起作用。我认为这是因为左侧 TextView ("@+id/tournament_name") 中的文本不够长,无法填满 ListView 的整个宽度(此处没有播种代码)。

我确信如果我使用android:layout_width="wrap_content"这两个 TextView 字段不应该重叠。

这是一个例子(见第二行):

还有什么办法可以解决这个问题吗?

【问题讨论】:

    标签: android android-layout


    【解决方案1】:
        android:layout_toLeftOf="@id/tournament_winner" in First TextView.
    

    还要设置android:maxLines="1"Fix width for tournament winner,因为当比赛名称变长时看不到...

    row.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
    
        <TextView
            android:id="@+id/tournament_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_toLeftOf="@id/tournament_winner"
            android:maxLines="1"
            android:text="NAMEEEEEEEEEEEEEEEEEEEEEEEEEEE"
            android:textSize="25dp" />
    
        <TextView
            android:id="@+id/tournament_winner"
            android:layout_width="wrap_content" android:layout_marginLeft="10dp"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="WINER"
            android:textSize="25dp" />
    
    </RelativeLayout>
    

    【讨论】:

    • 这不会导致编译时出错吗?锦标赛获胜者还不存在,那么如何与它保持一致呢?
    • 这在此处的答案中得到解决:stackoverflow.com/a/11594737/369480 您需要确保在 ID 中指定 +。
    • 向 ndroid 致敬:layout_toLeftOf="@id/tournament_winner"。它有效
    【解决方案2】:

    非常感谢您的回答 - 抱歉,我花了一些时间回复。我最终使用了您的android:layout_toLeftOf="@+id/tournament_winner",但没有使用单行和左侧的边距,因为结果对我来说似乎很完美(希望其他设备也是如此)。

    但有一件事 - 在第一个文本视图 (tournament_name) 中,我必须使用 android:layout_toLeftOf="@+id/tournament_winner" 而不是 android:layout_toLeftOf="@id/tournament_winner" - 注意添加的 +。出于某种原因,我在使用android:layout_toLeftOf="@id/tournament_winner" 时遇到错误:错误:未找到与给定名称匹配的资源... 所以似乎有可能并且需要在调用时定义资源这是因为系统在定义之前并不知道它。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
    
    <TextView
        android:id="@+id/tournament_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/tournament_winner"            
        android:layout_alignParentLeft="true"        
        android:textSize="25dp" />
    
    <TextView
        android:id="@+id/tournament_winner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"         
        android:layout_alignParentRight="true"
        android:textSize="25dp" />
    
    </RelativeLayout>
    

    【讨论】:

    • 如果您不想添加 +,只需更改在 xml 中添加 TextViews 的顺序即可。所以首先添加锦标赛获胜者,然后添加锦标赛名称。
    • 我认为你不需要android:id="@+id/tournament_winner",只需使用android:id="@id/tournament_winner",因为tournament_winner 已经在layout_toLeftOf 中定义了
    【解决方案3】:

    您可以使用单个文本视图代替两个文本视图,只需在一个文本视图中显示两个字符串!

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多