Android:相对于其他视图元素动态设置TextView宽度

时间:2018-02-22 09:46:49

标签: android android-layout android-relativelayout

我得到了TextView basket_item_list_options。此TextView的文本是动态设置的,可能很长。

问题是,如果它很长,则此Button右侧的三个TextView被推出视图。我想设置TextView的{​​{1}}的宽度,Button仍在视图中,它只为自己使用更多行(使用更多高度)。

有人知道我需要做些什么改变吗?或者我是否需要以编程方式执行此操作?

当TextView内容不太多时,它的外观如下:

enter image description here

字符串“Nichts:Stuff;”是TextView的内容。如果此内容过多,则右侧的三个buttons将被推出视图。

以下是布局代码:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/item_list_item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="5dp">

    <LinearLayout
        android:id="@+id/basket_item_list_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@+id/basket_item_list_image"
        android:layout_toRightOf="@+id/basket_item_list_image"
        android:orientation="vertical">

        <TextView
            android:id="@+id/basket_item_list_itemname"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="false"
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp"
            android:layout_toEndOf="@+id/basket_item_list_image"
            android:layout_toRightOf="@+id/basket_item_list_image"
            android:text="ItemName"
            android:textColor="@android:color/black"
            android:textSize="24sp"
            tools:layout_editor_absoluteX="158dp"
            tools:layout_editor_absoluteY="37dp" />

        <TextView
            android:id="@+id/basket_item_list_options"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp"
            android:text="Options" />
    </LinearLayout>

    <Button
        android:id="@+id/basket_item_list_increment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@+id/basket_item_list_description"
        android:layout_toRightOf="@+id/basket_item_list_description"
        android:minWidth="1dp"
        android:text="+" />

    <Button
        android:id="@+id/basket_item_list_decrement"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginStart="5dp"
        android:layout_toEndOf="@+id/basket_item_list_increment"
        android:layout_toRightOf="@+id/basket_item_list_increment"
        android:minWidth="1dp"
        android:text="-" />

    <ImageButton
        android:id="@+id/basket_item_list_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginStart="5dp"
        android:layout_toEndOf="@+id/basket_item_list_decrement"
        android:layout_toRightOf="@+id/basket_item_list_decrement"
        android:text="-"
        app:srcCompat="@drawable/ic_garbage" />

    <ImageView
        android:id="@+id/basket_item_list_image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="false"
        android:layout_alignParentStart="false"
        android:layout_alignParentTop="false"
        android:layout_alignWithParentIfMissing="false"
        android:layout_centerHorizontal="false"
        app:srcCompat="@drawable/shop_sample" />

    <TextView
        android:id="@+id/basket_item_list_price"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginEnd="10dp"
        android:layout_marginRight="10dp"
        android:gravity="center_vertical"
        android:text="1€"
        android:textColor="@android:color/black"
        android:textSize="14sp"
        tools:layout_editor_absoluteX="158dp"
        tools:layout_editor_absoluteY="37dp" />

    <TextView
        android:id="@+id/basket_item_list_count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="false"
        android:layout_alignParentRight="false"
        android:layout_centerVertical="true"
        android:layout_marginEnd="2dp"
        android:layout_marginRight="2dp"
        android:layout_toLeftOf="@+id/basket_item_list_price"
        android:layout_toStartOf="@+id/basket_item_list_price"
        android:gravity="center_vertical"
        android:text="nx"
        android:textColor="@android:color/black"
        android:textSize="14sp"
        android:visibility="gone"
        tools:layout_editor_absoluteX="158dp"
        tools:layout_editor_absoluteY="37dp" />

</RelativeLayout>

5 个答案:

答案 0 :(得分:1)

尝试下面的代码,这里我说的是LinearLayout作为父级,其中所有布局都是LinearLayout。您可以根据需要更改weight

enter image description here

结构:

<LinearLayout>
    <LinearLayout> //weight 
          <ImageView>
          <TextView>
    </LinearLayout> 

   <LinearLayout>//weight 
          //all Buttons
   </LinearLayout> 

<LinearLayout>

以下是完整代码:

    <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/item_list_item"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="5dp">


    <LinearLayout
        android:layout_weight="1"
        android:id="@+id/basket_item_list_description"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <ImageView
                android:id="@+id/basket_item_list_image"
                android:layout_width="50dp"
                android:layout_height="50dp"
                app:srcCompat="@mipmap/ic_launcher" />



        </LinearLayout>
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">


            <TextView
                android:id="@+id/basket_item_list_itemname"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="false"
                android:layout_marginLeft="10dp"
                android:layout_marginStart="10dp"
                android:layout_toEndOf="@+id/basket_item_list_image"
                android:layout_toRightOf="@+id/basket_item_list_image"
                android:text="Item"
                android:textColor="@android:color/black"
                android:textSize="24sp"
                tools:layout_editor_absoluteX="158dp"
                tools:layout_editor_absoluteY="37dp" />

            <TextView
                android:id="@+id/basket_item_list_options"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginStart="10dp"
                android:text="Options" />


        </LinearLayout>


    </LinearLayout>


    <LinearLayout
        android:gravity="right"
        android:layout_weight="1.2"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">



        <Button
            android:id="@+id/basket_item_list_increment"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:minWidth="1dp"
            android:text="+" />

        <Button
            android:id="@+id/basket_item_list_decrement"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_marginLeft="5dp"
            android:layout_marginStart="5dp"
            android:text="-" />

        <ImageButton
            android:id="@+id/basket_item_list_delete"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_marginLeft="5dp"
            android:layout_marginStart="5dp"
            android:text="-"
            app:srcCompat="@mipmap/ic_launcher" />





        <TextView
            android:id="@+id/basket_item_list_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="10dp"
            android:layout_marginRight="10dp"
            android:gravity="center_vertical"
            android:text="1€"
            android:textColor="@android:color/black"
            android:textSize="14sp"
            tools:layout_editor_absoluteX="158dp"
            tools:layout_editor_absoluteY="37dp" />

        <TextView
            android:id="@+id/basket_item_list_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="2dp"
            android:layout_marginRight="2dp"
            android:gravity="center_vertical"
            android:text="nx"
            android:textColor="@android:color/black"
            android:textSize="14sp"
            android:visibility="visible"
            tools:layout_editor_absoluteX="158dp"
            tools:layout_editor_absoluteY="37dp" />

    </LinearLayout>

</LinearLayout>

答案 1 :(得分:0)

您可以使用weightSum的{​​{1}}属性在视图之间平均分配可用空间。请参阅下面的示例代码,ragards。

我已经把weightSum = 10变量,你可以按照你的要求放置并分配给子视图,这将占用空间wrt to weightSum百分比

LinearLayout

答案 2 :(得分:0)

这样做肯定有助于你: -

<LinearLayout
        android:id="@+id/basket_item_list_description"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@+id/basket_item_list_image"
        android:layout_toRightOf="@+id/basket_item_list_image"
        android:orientation="vertical">

        <TextView
            android:id="@+id/basket_item_list_itemname"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="false"
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp"
            android:layout_toEndOf="@+id/basket_item_list_image"
            android:layout_toRightOf="@+id/basket_item_list_image"
            android:text="ItemName"
            android:textColor="@android:color/black"
            android:textSize="24sp"
            tools:layout_editor_absoluteX="158dp"
            tools:layout_editor_absoluteY="37dp" />

        <TextView
            android:id="@+id/basket_item_list_options"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp"
            android:text="Options"
           />
    </LinearLayout>

答案 3 :(得分:0)

使用weightSum概念可获得更好的效果。首先将它作为两个单独的布局,一个用于描述&amp;另一个是三个按钮。现在将具有这两个布局的一个父布局作为子布局,并使用一些相应的布局权重。父布局应该是两个子个体权重的总和。

对于参考:https://www.linkedin.com/pulse/android-layout-weight-weightsum-ramasamy-kasiviswanathan/

答案 4 :(得分:0)

我建议您在weight上使用Views参数。那么你的行元素将是固定大小,而不是你应该在TextView上使用水平滚动。 使用weight

的示例
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="1">

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:scrollHorizontally="true"
            android:maxLines="1"/>

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:scrollHorizontally="true"
            android:maxLines="1"/>
    </LinearLayout>
</LinearLayout>  

您应该在应该是某些对象的行中插入另一个LinearLayout f.e。buttons,images ... )。 android:scrollHorizontally="true"android:scrollHorizontally="true" TextView参数表示文字仅以固定尺寸显示TextView,如果文字的文字非常长,则不会覆盖其他视图。
请注意,父版面宽度不能为wrap_content