固定宽度TextView,带拉伸复合可绘制

时间:2013-02-12 14:37:32

标签: android layout textview compound-drawables

我正在尝试实现以下布局:固定宽度TextView对齐到其父级的左侧,其中的文本与TextView的右侧对齐(这就是固定宽度的原因,可以通过其他方式完成?)和父母的其余部分用一个drawable(简单的线)填充。像这样:screenshot

这是一个包含2种类型行的ListView,带有行的行的布局非常简单 - 使用TextView和ImageView的LinearLayout(如果需要,我可以稍后发布确切的代码)。而且我收到一个警告,它可以用一个带有复合drawable的TextView替换。

我全都是为了优化,所以我真的试着遵循这个建议。不幸的是我无法获得相同的结果 - 该行要么被约束到TextView的宽度,要么文本被对齐到ListItem的右侧,现在到了固定位置。

我错过了什么吗?

编辑:显然它实际上是不可能的,因为还有一些其他的复杂情况(drawable现在是一个水平列表drawable,它不总是一行,有时它有一个非固定的我必须设置的高度)我将保留它现在 - 线性布局,包含一个TextView和一个ImageView。

6 个答案:

答案 0 :(得分:3)

我不认为你错过任何东西。 TextView复合可绘制功能不是非常可定制的,并且通常不值得花时间尝试让它们看起来正确。一些棉绒警告有点过分和过早。

答案 1 :(得分:3)

lint引用的优化是针对固定大小的图像更好地归因的东西。在你的情况下,线条必须拉伸屏幕长度的其余部分,因此它不能用复合drawable的textview完成。这种棉绒警告更多的是一个建议,而不是必须完成的事情,只需通过检查只有textview和imageview的线性布局来检测,而不是检查图像视图中需要进行的操作。如果你已经按照你的方式工作,我认为你应该不管它。

答案 2 :(得分:1)

仅使用标准TextView无法实现此目的。如果您真的想减少视图数量,可以创建自定义TextView类,将layoutWidth设置为matchParent并从文本结束到右边框绘制线条。但它不值得做。一些额外的观点不会减慢你的名单。

答案 3 :(得分:0)

我不确定你是否能够实现你真正想要的东西,但是你可以改变你发布的链接中的线性布局:

    <RelativeLayout
        android:id="@+id/relTrial"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    <TextView 
        android:id="@+id/txtTime"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:text="12:45 AM"
        android:layout_alignParentLeft="true"/>
    <LinearLayout 
        android:id="@+id/lnrSep"
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:gravity="bottom"
        android:layout_marginLeft="5dp"  
        android:layout_marginRight="5dp"          
        android:layout_centerVertical="true"
        android:orientation="horizontal"
        android:background="@android:color/darker_gray"
        android:layout_toRightOf="@+id/txtTime"
        android:layout_alignParentRight="true"></LinearLayout>
    </RelativeLayout>

这样,时间文本将右对齐,尽管位于左侧,并且该行也将可见。

希望有所帮助。

答案 4 :(得分:0)

如果我说得对,你想在列表视图项下添加底部边框吗? 怎么试试这个:

android:drawableBottom="@drawable/line"

答案 5 :(得分:0)

您的观点是根据此创建的 -

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

    <TextView
        android:id="@+id/time"
        android:layout_width="@dimen/today_time_width"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:gravity="right"
        android:layout_marginRight="5dp" />

    <ImageView
        android:layout_gravity="center"
        android:id="@+id/border"
        android:layout_width="match_parent"
        android:layout_height="@dimen/today_current"
        android:src="?attr/item_boundary" />

</LinearLayout>