我正在尝试实现以下布局:固定宽度TextView对齐到其父级的左侧,其中的文本与TextView的右侧对齐(这就是固定宽度的原因,可以通过其他方式完成?)和父母的其余部分用一个drawable(简单的线)填充。像这样:
这是一个包含2种类型行的ListView,带有行的行的布局非常简单 - 使用TextView和ImageView的LinearLayout(如果需要,我可以稍后发布确切的代码)。而且我收到一个警告,它可以用一个带有复合drawable的TextView替换。
我全都是为了优化,所以我真的试着遵循这个建议。不幸的是我无法获得相同的结果 - 该行要么被约束到TextView的宽度,要么文本被对齐到ListItem的右侧,现在到了固定位置。
我错过了什么吗?
编辑:显然它实际上是不可能的,因为还有一些其他的复杂情况(drawable现在是一个水平列表drawable,它不总是一行,有时它有一个非固定的我必须设置的高度)我将保留它现在 - 线性布局,包含一个TextView和一个ImageView。
答案 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>