将relativelayout的宽度设置为屏幕宽度的1/3?

Posted

技术标签:

【中文标题】将relativelayout的宽度设置为屏幕宽度的1/3?【英文标题】:Set the width of relativelayout 1/3 the width of the screen? 【发布时间】:2014-02-09 02:29:54 【问题描述】:

我有如下布局。现在,我不想将相对布局的宽度设置为固定的 240 dp。我想将相对布局的宽度设置为屏幕宽度的 1/3。是否可以在 xml 文件中执行此操作。如果不可能,我该如何使用 java 代码来实现呢?

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        android:id="@+id/fullscreen"
        style="@style/translucent">
           <RelativeLayout
            android:layout_
            android:layout_
            android:layout_gravity="right"
            android:gravity="center"
            android:background="#88000000"
            android:id="@+id/sidebar">

           </RelativeLayout>

    </FrameLayout>

【问题讨论】:

【参考方案1】:

您必须使用LinearLayout 才能使视图的宽度为其父视图的三分之一。

类似:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_>
    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:gravity="center"
        android:background="#88000000">
    </RelativeLayout>
    <ViewGroup
        android:layout_
        android:layout_
        android:layout_weight="2">
    </ViewGroup>
</LinearLayout>

关键位是layout_weights的比例。 documentation 很不错。

【讨论】:

【参考方案2】:

在父级中使用weightsum="3",在子级中使用layout_weight=1。 Take a look a this reference

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:id="@+id/fullscreen"
    style="@style/translucent"
    android:orientation="horizontal"
    android:weightSum="3">

    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_gravity="right"
        android:gravity="center"
        android:background="#88000000"
        android:id="@+id/sidebar"
        android:layout_weight="1" 
        >

    </RelativeLayout>

    <!-- other views, with a total layout_weight of 2 -->

</LinearLayout>

【讨论】:

如果LinearLayout 只有一个子布局,那就是relativelayout。在relativelayout中只能设置layout_weight = 1吗? 你可以试试,你会自学的! :-) 无论如何,请记住,您始终可以为此目的使用虚拟视图,例如 &lt;View android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2"&gt; &lt;/View&gt;,它不会显示任何内容,但会使用额外的空间【参考方案3】:

LinearLayoutandroid:layout_orientation="horizontal" 是您想要的,以及权重。

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="horizontal">

    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_weight="1"
        ...all your stuff... />

    <View
        android:layout_
        android:layout_
        android:layout_weight="2" />


</LinearLayout>

【讨论】:

以上是关于将relativelayout的宽度设置为屏幕宽度的1/3?的主要内容,如果未能解决你的问题,请参考以下文章

RelativeLayout 没有正确更新自定义视图的宽度

Android中RelativeLayout中的视图宽度和高度始终为零

视图不会在 RelativeLayout 中正确对齐(Java 代码中设置的视图宽度)

将 CTaskDialog 的宽度设置为屏幕宽度的 50%

将CTaskDialog的宽度设置为屏幕宽度的50%

将 UILabel 设置为屏幕宽度和高度以适合包含的文本