在LinearLayout中使用权重调整textView的大小

时间:2015-03-19 16:59:00

标签: android textview android-layout-weight

我有一个水平LinearLayout:ImageView / TextView / ImageView。

我已经以这种形式分配了这些项目的权重:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="1" >

    <ImageView
        android:id="@+id/vboxrow_icono"
        android:layout_width="0dp"
        android:layout_height="@dimen/viewboxrow_icon_height"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="@dimen/viewboxrow_icon_margin"
        android:layout_marginRight="@dimen/viewboxrow_icon_margin"
        android:layout_weight="0.1" />

    <TextView
        android:id="@+id/vboxrow_texto"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:textSize="@dimen/viewbox_desc_size"
        android:text="Title"
        android:layout_weight="0.85" />

    <ImageView
        android:id="@+id/vboxrow_favorito"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="@dimen/viewboxrow_icon_margin"
        android:layout_marginRight="@dimen/viewboxrow_icon_margin"
        android:src="@drawable/icono_listado_nofavorito"
        android:layout_weight="0.05" />

</LinearLayout>

一切都很好,但是当文字非常大时,图像不在最后,因为在他的位置它是文本。如果我为这张图片加了重量,我不知道为什么会出现这种情况......如果文字非常大,我怎么划分它呢?例如。 3分或其他因为我已经把'wrap_content&#39;在TextView中的高度。

两种情况:

1)普通文本:ImageView /文本视图/图像视图

2)大文:ImageView / Text Vieeeeeeeeeeeeew

非常感谢。

1 个答案:

答案 0 :(得分:0)

您始终可以选择调整代码中的组件大小,这将为您提供所需的百分比,但能够修复TextView的宽度。我可能会使用@ jujux789中的建议并使用RelativeLayout或其他一些自定义组件。

    ImageView iv1 = (ImageView) findViewById(R.id.image1);
    ImageView iv2 = (ImageView) findViewById(R.id.image2);
    TextView tv1 = (TextView) findViewById(R.id.text1);

    DisplayMetrics displayMetrics = this.getResources().getDisplayMetrics();
    float dpWidth = displayMetrics.widthPixels / displayMetrics.density;

    float width1 = dpWidth * 0.1f;
    float width2 = dpWidth * 0.85f;
    float width3 = dpWidth * 0.5f;

    ViewGroup.LayoutParams lp1 = iv1.getLayoutParams();
    lp1.width = (int)width1;
    iv1.setLayoutParams(lp1);

    ViewGroup.LayoutParams lp2 = tv1.getLayoutParams();
    lp2.width = (int)width2;
    tv1.setLayoutParams(lp2);

    ViewGroup.LayoutParams lp3 = iv2.getLayoutParams();
    lp3.width = (int)width3;
    iv2.setLayoutParams(lp3);