用百分比值设置宽度

时间:2013-05-29 05:12:17

标签: android android-xml

我正在尝试创建一个活动,其中几个文本框排列在两列中。我这两列的宽度是屏幕的30%,另一列是剩余的70%。这是我的XML代码:

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

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:layout_marginTop="3dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginRight="2dp"
            android:layout_weight="0.3"
            android:background="@drawable/gradient_bg_hover"
            android:gravity="center_vertical" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="naming is fun fun is naming" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_weight="0.7"
            android:background="@drawable/gradient_bg_hover"
            android:gravity="center_vertical" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Hi" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:layout_marginTop="3dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginRight="2dp"
            android:layout_weight="0.3"
            android:gravity="center_vertical"
            android:background="@drawable/gradient_bg_right" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Hi" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_weight="0.7"
            android:gravity="center_vertical"
            android:background="@drawable/gradient_bg_right" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Hi" />
        </LinearLayout>
    </LinearLayout>


</LinearLayout>

</ScrollView>

问题是带有文字“hi”的栏占据了屏幕的30%,但像“hello”这样的词占用的空间更多,而且形成失真。

无论文本大小如何,都应该占据屏幕的最大值的30%。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:0)

包含textview的线性布局的layout_width应为0 dp
使用 -

android:layout_width="0dp" 

而不是使用 -

android:layout_width="wrap_content"

因为在定义权重时,您无需定义宽度。 Weigths将自动处理宽度。

看看这是否有帮助。

编辑 - 这个xml应该可以正常工作 -

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:layout_marginTop="3dp"
    android:layout_weight="1"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginRight="2dp"
        android:layout_weight="0.3"
        android:background="@android:color/background_dark"
        android:gravity="center_vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="naming is fun fun is naming" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="0.7"
        android:background="@android:color/background_light"
        android:gravity="center_vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hi" />
    </LinearLayout>
</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:layout_marginTop="3dp"
    android:layout_weight="1"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginRight="2dp"
        android:layout_weight="0.3"
        android:gravity="center_vertical"
        android:background="@android:color/background_dark" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hi" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="0.7"
        android:gravity="center_vertical"
        android:background="@android:color/background_light" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hi" />
    </LinearLayout>
</LinearLayout>

答案 1 :(得分:0)

  1. 您应该考虑表格视图,以便在那里指定layout_wieght。

  2. 如果您使用layout_wieght,则将textviews的宽度设置为fill_parent,因为它是为其分配的空间。

  3. 使用为textview启用的单行,如果需要,可以选中文本。

  4. 编辑

    因为这个而无法正常工作

     <LinearLayout
                android:layout_width="wrap_content" //wrap_content
                android:layout_height="match_parent"
                android:layout_marginRight="2dp"
                android:layout_weight="0.3"
                android:gravity="center_vertical"
                android:background="@drawable/gradient_bg_right" >
    
                <TextView
                    android:layout_width="wrap_content"//wrap_content
                    android:layout_height="wrap_content"
                    android:text="Hi" />
            </LinearLayout>
    

    您没有将分配的空间分配给textview

答案 2 :(得分:0)

尝试将此用于TextView。如果这没有解决它,请尝试根据您的情况增加或减少值而不是3

android:ems = "3"

答案 3 :(得分:0)

如果使用layout_gravity,则将相应的高度/宽度设置为0.此外,我发现没有理由使用额外的嵌套线性布局。也许你可以使用这样的东西。

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

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:layout_marginTop="3dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_marginRight="2dp"
            android:layout_weight="0.3"
            android:text="Hi" />

        <TextView
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="0.7"
            android:text="Hi" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:layout_marginTop="3dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_marginRight="2dp"
            android:layout_weight="0.3"
            android:text="Hi" />

        <TextView
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="0.7"
            android:text="Hi" />
    </LinearLayout>
</LinearLayout>