传播文本以匹配父宽度

时间:2013-10-31 08:17:44

标签: java android user-interface textview

请查看以下代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".SalesInqury" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="@string/sales_inqury"
        android:textSize="40sp"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView1"
        android:layout_marginLeft="21dp"
        android:layout_toRightOf="@+id/textView1"
        android:src="@drawable/add_2" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_alignParentRight="true"
        android:layout_marginTop="16dp"
        android:hint="Search"
        android:ems="8" >

        <requestFocus />
    </EditText>

</RelativeLayout>

这会生成以下输出

enter image description here

说实话,这不是我想要的。文本应“展开”以匹配屏幕宽度,直到找到图像视图。我认为改善字母之间的空间可能是解决方案。

但我想知道是否有更好的解决方案,我们可以在Code或XML中做。

2 个答案:

答案 0 :(得分:0)

如果我说得对,你想要“销售咨询”下面的EditText。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".SalesInqury" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableRight="@drawable/add_2"
        android:text="@string/sales_inqury"
        android:textSize="40sp"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginTop="16dp"
        android:hint="Search"
        android:ems="8" >

        <requestFocus />
    </EditText>

</LinearLayout>

注意我用drawableRight替换了ImageView。它被称为compoundDrawable,可以设置为TextView文本附近的任何位置。 这里不需要使用RelativeLayout。垂直LinearLayout应该可以解决问题。

layout_width="match_parent" 

告诉View应该分布在布局的宽度上。

但是如果你想要EditText与“Sales Inquiry”在同一行,那么就完成了这一行。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="horizontal"
    tools:context=".SalesInqury" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:drawableRight="@drawable/add_2"
        android:text="@string/sales_inqury"
        android:textSize="40sp"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="center_vertical"
        android:layout_marginTop="16dp"
        android:hint="Search"
        android:ems="8" >

        <requestFocus />
    </EditText>

</LinearLayout>

使用水平LinearLayout,将第一个TextView的layout_width设置为wrap_content。 EditText应该使用layout_weight =“1”(仅适用于LinearLayout),这意味着它将占用尽可能多的空间。在水平LinearLayout中使用layout_weight时,请将layout_width设置为0dp。如果它是垂直的LinearLayout,则layout_height应为0dp。

答案 1 :(得分:0)

嘿,我对你的代码做了一些改动。我使用LinearLayout而不是Relativelayout。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:orientation="horizontal"
    android:weightSum="3.0f"
     >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1.0f"
        android:textSize="40sp"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1.0f"
        android:layout_marginLeft="21dp"

        />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1.0f"
        android:hint="Search"
        android:ems="8" >

        <requestFocus />
    </EditText>

</LinearLayout>