Android: 相对于其他视图元素动态设置 TextView 宽度
Android: set TextView width dynamically in relation to other view elements
我得到了这个 TextView
basket_item_list_options
。 TextView
的文本是动态设置的,可以很长。
问题是,如果它很长,这个TextView
右边的三个Button
就会被挤出视野。我想设置此 TextView
的宽度,使 Button
仍在视图中,它只是为自己使用更多行(使用更多高度)。
有谁知道我需要更改什么才能做到这一点?或者我需要以编程方式执行此操作吗?
当 TextView 内容不是太多时,它是这样的:
字符串 "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>
您可以使用 LinearLayout
的 weightSum
属性在视图之间平均分配可用的 space。请参考下面的示例代码,ragards.
我已经把 weightSum=10 放在哪个变量中,你可以根据你的要求把它分配给子视图,这将占用 space wrt to weightSum percentage
<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:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="10"
android:padding="5dp">
<TextView
android:layout_weight="7"
android:layout_width="0dp"
android:text="some text"
android:layout_height="wrap_content"/>
<Button
android:text="btn1"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<Button
android:text="btn2"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<Button
android:text="btn3"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
</RelativeLayout>
这样做肯定对你有帮助:-
<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>
使用 weightSum 概念以获得更好的结果。首先把它做成两个独立的布局,一个用于描述,另一个用于三个按钮。现在将具有这两个布局的一个父布局作为具有各自布局权重的子布局。父布局应该是两个子个体权重的总和。
供参考:https://www.linkedin.com/pulse/android-layout-weight-weightsum-ramasamy-kasiviswanathan/
我建议您在 Views
上使用 weight
参数。然后你的行元素将固定大小,而不是你应该在 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>
您应该在应该是一些对象(f.e。按钮、图像... 的行中插入另一个 LinearLayout
。 android:scrollHorizontally="true"
和 android:scrollHorizontally="true"
TextView
参数表示文本将仅以固定大小显示 TextView
,如果文本很长,则不会覆盖其他视图。
注意父布局宽度不能是 wrap_content
.
尝试使用以下代码,这里我说的是 LinearLayout
作为父级,其中所有布局都是 LinearLayout
。您可以根据需要更改 weight
。
结构:
<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>
我得到了这个 TextView
basket_item_list_options
。 TextView
的文本是动态设置的,可以很长。
问题是,如果它很长,这个TextView
右边的三个Button
就会被挤出视野。我想设置此 TextView
的宽度,使 Button
仍在视图中,它只是为自己使用更多行(使用更多高度)。
有谁知道我需要更改什么才能做到这一点?或者我需要以编程方式执行此操作吗?
当 TextView 内容不是太多时,它是这样的:
字符串 "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>
您可以使用 LinearLayout
的 weightSum
属性在视图之间平均分配可用的 space。请参考下面的示例代码,ragards.
我已经把 weightSum=10 放在哪个变量中,你可以根据你的要求把它分配给子视图,这将占用 space wrt to weightSum percentage
<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:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="10"
android:padding="5dp">
<TextView
android:layout_weight="7"
android:layout_width="0dp"
android:text="some text"
android:layout_height="wrap_content"/>
<Button
android:text="btn1"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<Button
android:text="btn2"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<Button
android:text="btn3"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
</RelativeLayout>
这样做肯定对你有帮助:-
<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>
使用 weightSum 概念以获得更好的结果。首先把它做成两个独立的布局,一个用于描述,另一个用于三个按钮。现在将具有这两个布局的一个父布局作为具有各自布局权重的子布局。父布局应该是两个子个体权重的总和。
供参考:https://www.linkedin.com/pulse/android-layout-weight-weightsum-ramasamy-kasiviswanathan/
我建议您在 Views
上使用 weight
参数。然后你的行元素将固定大小,而不是你应该在 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>
您应该在应该是一些对象(f.e。按钮、图像... 的行中插入另一个 LinearLayout
。 android:scrollHorizontally="true"
和 android:scrollHorizontally="true"
TextView
参数表示文本将仅以固定大小显示 TextView
,如果文本很长,则不会覆盖其他视图。
注意父布局宽度不能是 wrap_content
.
尝试使用以下代码,这里我说的是 LinearLayout
作为父级,其中所有布局都是 LinearLayout
。您可以根据需要更改 weight
。
结构:
<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>