5

我正在尝试实现以下布局:固定宽度的 TextView 与其父级的左侧对齐,其中的文本与该 TextView 的右侧对齐(这就是为什么固定宽度,可以用其他方式完成吗?)和父级的其余部分填充有可绘制的(简单线)。像这样:截屏

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

我完全支持优化,所以我真的很努力地听从了这个建议。不幸的是,我无法得到相同的结果——该行要么被限制为 TextView 的宽度,要么文本与 ListItem 的右侧对齐,现在到固定位置。

我错过了什么吗?

编辑:显然这实际上是不可能的,因为还有一些其他的复杂性(drawable现在是一个level-list drawable,它并不总是一条线,有时它有一个我必须设置的非固定高度)我会离开它现在的样子 - 线性布局,包含一个 TextView 和一个 ImageView。

4

6 回答 6

3

我不认为你缺少任何东西。TextView 复合可绘制功能不是非常可定制的,通常不值得您花时间试图让它们看起来正确。一些 lint 警告有点过于热心和为时过早。

于 2014-01-06T09:34:36.503 回答
3

lint 所指的优化更适合固定大小的图像。在您的情况下,该线必须拉伸屏幕长度的其余部分,因此它不是可以使用具有复合可绘制的文本视图来完成的。这种 lint 警告更多的是一种建议,而不是必须做的事情,并且通过仅检查仅具有 textview 和 imageview 的线性布局而不是检查图像视图中需要去的内容来检测。如果你已经让它按照你的方式工作,我认为你应该不管它。

于 2014-01-10T22:25:20.940 回答
1

您的视图由此创建 -

<?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>
于 2014-01-09T19:41:04.503 回答
1

仅使用标准 TextView 无法实现此目的。如果您真的想减少查看次数,您可以创建自定义 TextView 类,将 layoutWidth 设置为 matchParent 并从文本端到右边框画线。但这不值得去做。一些额外的视图不会减慢您的列表。

于 2014-01-10T09:06:30.657 回答
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>

这样,虽然时间文本在左侧,但时间文本将右对齐,并且该行也将可见。

希望有帮助。

于 2014-01-07T16:50:32.970 回答
0

如果我没听错,您想为列表视图项添加底部边框吗?试试这个怎么样:

android:drawableBottom="@drawable/line"
于 2014-01-09T13:13:43.350 回答