LinearLayout,具有适应性的TextView包装

时间:2017-10-03 11:14:37

标签: android android-layout

我正在努力优化具有三个特定宽度列的if __name__ == '__main__': output_file = ... # parse arguments if output_file: with open(output_file, 'w') as outf: do_stuff(outf) else: do_stuff(sys.stdout) 行项目。

A列有一个ListView和一个垂直分隔符Button

B列有一个View,根据具体情况可能会或可能不会显示TextView

C列的ImageView无法显示,RelativeLayoutTextViewCheckBox视情况而定

参见示例图片。 Herring Gull行不需要图标。鲱鱼x小黑背鸥(杂交)需要一个红色图标,类似于其上下的其他物种。但是,较长的物种名称在将图标包裹到两条线上时会将图标推出视图。

enter image description here

ImageView

我尝试更换<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/species_row_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants" android:orientation="horizontal"> <Button android:id="@+id/button_count" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.15" android:background="@null" android:paddingBottom="3dp" android:paddingTop="3dp" android:text="+" android:textColor="@color/light_gray"/> <View android:layout_width="1dp" android:layout_height="match_parent" android:layout_marginEnd="5dp" android:layout_marginRight="5dp" android:background="@color/bpWhite"/> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="3dp" android:layout_marginRight="3dp" android:layout_weight="0.70"> <TextView android:id="@+id/textview_species_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:minHeight="44dp" android:paddingBottom="3dp" android:paddingTop="3dp" android:text="Species name" android:textColor="#000" android:textSize="15sp"/> <ImageView android:id="@+id/speciesBinIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:paddingLeft="5dp" android:paddingStart="5dp" android:scaleType="fitXY" android:src="@drawable/ic_uncommon" android:visibility="gone"/> </LinearLayout> <RelativeLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.10" android:gravity="center_vertical"> <TextView android:id="@+id/textview_rare" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginStart="5dp" android:layout_marginTop="4dp" android:background="@drawable/rare_border" android:gravity="center" android:text="@string/single_character_for_rare" android:textColor="@color/rareBackground" android:textStyle="bold" android:visibility="gone"/> <CheckBox android:id="@+id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:buttonTint="@color/rareBackground" android:gravity="center" android:visibility="gone"/> <ImageView android:id="@+id/high_count_warning" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="6dp" android:layout_marginStart="6dp" android:layout_marginTop="4dp" android:gravity="center" android:scaleType="fitXY" android:src="@drawable/ic_high_count" android:visibility="gone"/> </RelativeLayout> &amp; TextViewImageView填充TextView的{​​{1}}组合,但在包装文字的末尾放置了图标(请参阅Green Woodpecker的示例),当我想要它位于文本的右侧。

enter image description here

我希望的行为是SpannableStringBuilder图标始终位于ImageView旁边,当TextView很长时,TextView在B列中占主导地位并且ImageView将文本包装成稍小的空间。

请问这可能吗?

3 个答案:

答案 0 :(得分:1)

尝试使用图标移除ImageView,如果要使用以下代码行显示,请直接在TextView添加图标:

textView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.your_id, 0);

希望这有帮助

答案 1 :(得分:0)

很难从你的问题中完全理解,但我解码的是你需要将 textview imageview 并排放置,这只能是如果您对textview宽度进行硬编码并将textview高度设置为 match_paren t,则可能如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/species_row_container"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:descendantFocusability="blocksDescendants"
          android:orientation="horizontal">


<Button
    android:id="@+id/button_count"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="0.15"
    android:background="@null"
    android:paddingBottom="3dp"
    android:paddingTop="3dp"
    android:text="+"
    android:textColor="@color/light_gray"/>

<View
    android:layout_width="1dp"
    android:layout_height="match_parent"
    android:layout_marginEnd="5dp"
    android:layout_marginRight="5dp"
    android:background="@color/bpWhite"/>

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

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginEnd="3dp"
            android:layout_marginRight="3dp"
            android:layout_weight="0.90">

            <TextView
                android:id="@+id/textview_species_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:toStartOf="@+id/speciesBinIcon"
                android:layout_gravity="center_vertical"
                android:minHeight="44dp"
                android:paddingBottom="3dp"
                android:paddingTop="3dp"
                android:text="Species name"
                android:textColor="#000"
                android:textSize="15sp"/>

            <ImageView
                android:id="@+id/speciesBinIcon"
                android:alignParentEnd="true"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center_vertical"
                android:paddingLeft="5dp"
                android:paddingStart="5dp"
                android:scaleType="fitXY"
                android:src="@drawable/ic_uncommon"
                android:visibility="gone"/>

        </RelativeLayout>

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.10"
            android:gravity="center_vertical">

            <TextView
                android:id="@+id/textview_rare"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:layout_marginStart="5dp"
                android:layout_marginTop="4dp"
                android:background="@drawable/rare_border"
                android:gravity="center"
                android:text="@string/single_character_for_rare"
                android:textColor="@color/rareBackground"
                android:textStyle="bold"
                android:visibility="gone"/>

            <CheckBox
                android:id="@+id/checkbox"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:buttonTint="@color/rareBackground"
                android:gravity="center"
                android:visibility="gone"/>

            <ImageView
                android:id="@+id/high_count_warning"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="6dp"
                android:layout_marginStart="6dp"
                android:layout_marginTop="4dp"
                android:gravity="center"
                android:scaleType="fitXY"
                android:src="@drawable/ic_high_count"
                android:visibility="gone"/>

        </RelativeLayout>

</LinearLayout>

</LinearLayout>

P.S:代码未经过测试,这只是一个大致的想法

答案 2 :(得分:0)

您必须为textView android:id="@+id/textview_species_name"声明maxWidth  为了使其正常工作。请记住,它必须是基于设备屏幕宽度的动态