1

我很难想出一个可行的布局。我有一个填充屏幕宽度的视图。它包含三个子视图:

  1. 一些文字
  2. 正文后括号中的数字
  3. 一个按钮

按钮右对齐,文本项一个接一个左对齐,如图:

| 一些标题文本 (n) [按钮] |

问题是控制文本太长时会发生什么。我想要这样,以便数字始终在正文右侧可见。如果需要,应截断正文,以便其他两个视图保持可见。

| 一些非常长的标题... (n) [按钮] |

我得到的最接近的成功截断主要文本的结果是(n)总是在按钮旁边右对齐,即使主要文本足够短以适应。那不是我想要的。

你会如何处理这个问题?

我还没有发布我当前的任何 XML,以免影响任何人的建议。

4

3 回答 3

1

我不相信有任何 xml 布局。我的猜测是你需要扩展TextView测量里面的文本长度onDraw(...),通过一些迭代相应地调整文本(即,一次删除一个字符,直到文本适合画布)

我刚刚发现另一个与您的问题非常相似的问题:Ellipsize only a section in a TextView。除了中间的椭圆之外没有其他答案。


另一个想法:

我想知道在水平线性布局中是否有一个带有主要文本左椭圆wrap_content)的文本视图和另一个带有括号中的数字(wrap_content)的文本视图。该布局将位于相对布局layout_toLeftOf按钮内,即wrap_contentlayout_alignParentRight

这有什么意义吗?我现在没有 Eclipse 来自己测试它。不确定 (n) 文本视图是否会在按钮后面丢失或没有长文本。

或者(并且不那么有趣),您可以设置一个单一的相对布局,其中两个 textviews都是 layout_toRightOf并且按钮向右对齐(layout_alignParentRight)并设置第一个 textview 的最大宽度(android:maxWidth)。不过,您需要为不同的屏幕设置不同的布局。


一个具有固定最大宽度的示例,可以根据需要工作:

<?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="fill_parent"
    >
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="click me"
    android:id="@+id/bt1"
    android:layout_alignParentRight="true"
    />    
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="short text"
    android:lines="1"
    android:ellipsize="end"
    android:id="@+id/t1"
    android:layout_alignParentLeft="true"
    />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="(n)"
    android:lines="1"
    android:id="@+id/n1"
    android:layout_toRightOf="@id/t1"
    />
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="click me"
    android:id="@+id/bt2"
    android:layout_below="@id/bt1"
    android:layout_alignParentRight="true"
    />    
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="very long text that will not fit in any layout, regardless of the size of the screen"
    android:lines="1"
    android:ellipsize="end"
    android:id="@+id/t2"
    android:layout_below="@id/bt1"
    android:layout_alignParentLeft="true"
    android:maxWidth="220dp"
    />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="(n)"
    android:lines="1"
    android:id="@+id/n2"
    android:layout_below="@id/bt1"
    android:layout_toRightOf="@id/t2"
    />
</RelativeLayout>
于 2011-05-09T03:36:46.390 回答
0

尝试线性布局,将文本视图的权重设置为 1,并将省略号设置为TruncateAt.MIDDLE. 检查此布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="wrap_content">
    <TextView android:id="@+id/text" android:layout_width="0dp"
        android:layout_height="wrap_content" android:lines="1"
        android:ellipsize="middle" android:gravity="left"
        android:layout_weight="1" />
    <Button android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
于 2011-05-09T05:20:35.147 回答
0

关键是项目的顺序,因为这是测量它们的顺序,以确保您的按钮和(n)文本在整体布局中获得足够的空间:

<RelativeLayout
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  >

  <Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    />

  <TextView
    android:id="@+id/middle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="left"
    android:layout_toLeftOf="@id/button"
    android:text="(n)"
    />

   <TextView
     android:id="@+id/title"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_toLeftOf="@id/middle"
     android:layout_alignParentLeft="true"
     android:gravity="left"
     android:ellipsize="end"
     android:text="Some really long to text to make this flow over"
     android:lines="1"
     android:maxLines="1"
     />

</RelativeLayout>
于 2011-05-09T17:37:06.810 回答