如何设置元素的宽度百分比?

时间:2011-10-23 19:45:20

标签: java android

我的问题非常简单。我有布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="@drawable/mobile_background"
    android:layout_width="fill_parent"
    android:gravity="center"
    android:layout_height="fill_parent"
    >
    <Button 
        android:text="GET MESSAGES" 
        android:
        android:id="@+id/buttonMessages" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" />
    <Button 
        android:text="REGISTRATION" 
        android:id="@+id/buttonRegistration" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" />
    <Button 
        android:text="SETTINGS" 
        android:id="@+id/buttonSettings" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" />
</LinearLayout>

但是我需要为按钮设置非固定大小 - 我需要设置屏幕宽度的30%。我该怎么做?

3 个答案:

答案 0 :(得分:1)

尝试将按钮嵌套在水平LinearLayouts中,将另一个视图嵌套到侧面以进行填充。分配按钮和查看android:layout_width="0dp",然后按下按钮android:layout_weight="3"和视图android:layout_weight="7"。这将使您的按钮为30%,空视图为70%。

<?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="fill_parent"
    android:gravity="center"
    android:orientation="vertical" >

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

        <Button
            android:id="@+id/buttonMessages"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:text="GET MESSAGES" />

        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="7" />
    </LinearLayout>

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

        <Button
            android:id="@+id/buttonRegistration"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:text="REGISTRATION" />

        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="7" />
    </LinearLayout>

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

        <Button
            android:id="@+id/buttonSettings"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:text="SETTINGS" />

        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="7" />
    </LinearLayout>

</LinearLayout>

答案 1 :(得分:0)

有三个按钮很难设置30-70 :)我会告诉你如何用两个按钮做,你会得到它。

如果使用fill_parent作为宽度,则空间将以倒数比例分布。所以你应该为较小的按钮设置7的权重,为较大的按钮设置3的权重。使用更多按钮它更棘手,但你可以做数学:1 / x + 1 / y + 1 / z = 1你会得到比例的方程式,在30%,20%,50%的情况下: 1 / x / 3 = 1 / y / 2 = 1 / z / 5或者您可以尝试设置看起来不错的值:)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="@drawable/mobile_background"
    android:layout_width="fill_parent"
    android:gravity="center"/>
    <Button 
        android:text="Narrow button" 
        android:
        android:id="@+id/buttonMessages" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:layout_weight="7"/>
    <Button 
        android:text="Wide button" 
        android:id="@+id/buttonRegistration" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:layout_weight="3"/>
</LinearLayout>

答案 2 :(得分:0)

这不能在XML中完成。您必须在代码中指定大小。我会在活动的onCreate()中做到这一点:

obj.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT,0.25));

这意味着“使用父母身高的100%,但父母宽度的25%”。

source