两个视图之间的文本

时间:2014-06-21 11:08:22

标签: android android-layout

我想达到以下结果:

  • 电视:TextView
  • IV:ImageView

Relative layout

所有四个视图都是从数据库中填充的,因此具有动态宽度(IV除外)。

ID从左到右:

icon
tv_top
tv_bottom
tv_right

我从本教程(Vogella Android 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="?android:attr/listPreferredItemHeight"
                 android:padding="5dip" >

    <ImageView
            android:id="@+id/icon"
            android:layout_width="@dimen/photo_item_size"
            android:layout_height="@dimen/photo_item_size"
            android:layout_alignParentBottom="true"
            android:layout_alignParentTop="true"
            android:layout_marginRight="10dp"
            android:src="@drawable/ic_launcher"
            >
    </ImageView>

    <TextView
            android:id="@+id/tv_right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@id/icon"
            android:layout_gravity="right"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="1dp"
            android:textSize="27sp"
            >
    </TextView>

    <TextView
            android:id="@+id/tv_bottom"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_toRightOf="@id/icon"
            android:ellipsize="end"
            android:singleLine="true"
            android:textSize="14sp"
            >
    </TextView>

    <TextView
            android:id="@+id/tv_top"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:ems="10"
            android:textSize="21.5sp"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_alignWithParentIfMissing="true"
            android:layout_toRightOf="@id/icon"
            android:singleLine="true"
            android:ellipsize="end"

            android:layout_marginRight="70dp"

            >
    </TextView>

我的问题是我想根据tv_right的宽度动态更改tv_top的宽度。如果tv_right变大,我想让我的tv_top宽度更小。

目前,我使用android:layout_marginRight="70dp"命令为我的视图设置固定大小。

我也试过(在我的适配器中 - 以编程方式)像:

RelativeLayout.LayoutParams llp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
int relativeUsageWidth = viewHolder.tvAppRelativeUsage.getWidth(); // width is always 0
llp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT | RelativeLayout.ALIGN_PARENT_TOP);
llp.addRule(RelativeLayout.RIGHT_OF,R.id.icon);
llp.setMargins(0, 0, relativeUsageWidth, 0);

有没有比编程更好的方法(也许是xml方式)?我应该使用线性布局吗?哪个是解决这个问题的最佳方法?

3 个答案:

答案 0 :(得分:1)

在中间的TextView中,不要使用带有额外边距的android:layout_alignParentRight="true",但要将它们设置为左侧ImageView的右侧,右侧TextView的左侧,并将宽度设置为{{1 }}。这将使它们直接适合于其他两个视图之间。

两个TextView的示例:

match_parent

再次为两个视图添加一个小边距,这样他们就不会直接粘贴在其他视图上。

答案 1 :(得分:1)

您可以使用LinearLayoutlayout_weight

<?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="?android:attr/listPreferredItemHeight"
              android:orientation="horizontal">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="80dp"
        android:layout_height="match_parent"
        android:src="@drawable/ic_launcher"/>

    <!-- weight 3 of 4 = 3/4 of available width for this LinearLayout -->
    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_top"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignBottom="@+id/tv_bottom"
            android:text="Top line"/>

        <TextView
            android:id="@+id/tv_bottom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:text="Bottom line"/>

    </RelativeLayout>

    <!-- weight 1 of 4 = 1/4 of available width for this TextView -->
    <TextView
        android:id="@+id/tv_right"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="Right text"/>

</LinearLayout>

答案 2 :(得分:1)

这可以使用任何其他布局来实现。我们只需要一个RelativeLayout

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

    <ImageView
        android:id="@+id/iv_left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/tv_right"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignBottom="@+id/iv_left"
        android:layout_alignParentRight="true"
        android:gravity="center"
        android:singleLine="true"
        android:text="ABC"
        android:textSize="24sp"
        android:background="#888"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/et_top"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/iv_left"
        android:layout_toLeftOf="@id/tv_right"
        android:singleLine="true"
        android:text="@string/app_name"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/et_bottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/iv_left"
        android:layout_toLeftOf="@id/tv_right"
        android:layout_below="@id/et_top"
        android:singleLine="true"
        android:text="@string/app_name"
        android:textSize="14sp" />

</RelativeLayout>

您可以根据自己的意愿设置填充和边距。

[编辑] oops没有注意到正确的一个是TextView ...代码更新..

希望有所帮助:)