Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I use layout_weight to position a RelativeLayout?

I've been trying all day to get this to work and i think that I can use RelativeLayout

android:layout_weight="0.3"  

to place three buttons on the right side of the screen, not centered but 30% down from the top.

Is this possible and if so how do I do it?

The following is my XML that shows three buttons underneath each other but in top right position:

   </RelativeLayout>
      <LinearLayout
        android:id="@+id/rightRelativeLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_weight="1"
        android:orientation="vertical"
        >
            <ImageButton
                android:id="@+id/btn_A" 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="A"
                android:src="@drawable/drawer_1"
                android:background="@android:color/transparent"


            /> 
            <ImageButton
                android:id="@+id/btn_B" 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:layout_weight="1"
                android:text="B"
                android:src="@drawable/drawer_1"
                android:background="@android:color/transparent"

                android:layout_below="@+id/btn_A"
            />
            <ImageButton
                android:id="@+id/btn_C" 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_marginTop="10dp"
                android:text="C"
                android:src="@drawable/drawer_1"
                android:background="@android:color/transparent"

                android:layout_below="@+id/btn_B"

            />
        </LinearLayout>

[UPDATE] Added final working version for people who need it

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/RelativeLayout1"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical">

    <Gallery xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/examplegallery" 
             android:layout_width="fill_parent"
             android:layout_height="wrap_content" />
   <RelativeLayout 
        android:id="@+id/InnerRelativeLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" >
    <Button 
        android:id="@+id/btn_newpen_drawtext" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Pen"
    />      
    <EditText 
        android:id="@+id/etx_addtext_drawtext"
        android:layout_width="fill_parent"
        android:layout_toLeftOf="@+id/btn_delete_pen"
        android:layout_toRightOf="@+id/btn_newpen_drawtext"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:text=""
    />
        <Button 
            android:id="@+id/btn_delete_pen" 
            android:layout_toLeftOf="@+id/btn_save_drawtext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Del"
        />
        <Button 
            android:id="@+id/btn_save_drawtext" 
            android:layout_alignParentRight="true" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="save"
        />

   </RelativeLayout>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rightLinerLayoutL0"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_toRightOf="@+id/RelativeLayout1"
    android:weightSum="1.0"
    android:layout_alignParentRight="true"
    android:orientation="vertical"
    >
    <LinearLayout android:layout_height="0dp" 
                  android:id="@+id/rightLinerLayoutL1" 
                  android:layout_weight="0.15" 
                  android:layout_width="0dp">
    </LinearLayout>
    <LinearLayout android:layout_height="0dp" 
                  android:orientation="vertical" 
                  android:id="@+id/rightLinerLayoutL2" 
                  android:layout_weight="0.85" 
                  android:layout_width="wrap_content">

        <ImageButton android:text="Button_A" 
            android:background="@android:color/transparent" 
            android:layout_height="wrap_content" 
            android:id="@+id/btn_A" 
            android:layout_width="wrap_content" 
            android:layout_gravity="right" 
            android:src="@drawable/drawer"
            android:onClick="btnAListener">
        </ImageButton>
        <ImageButton android:text="Button_B" 
            android:background="@android:color/transparent" 
            android:layout_height="wrap_content" 
            android:layout_marginTop="10dp"
            android:id="@+id/btn_B" 
            android:layout_width="wrap_content" 
            android:layout_gravity="right" 
            android:src="@drawable/drawer"
            android:onClick="btnBListener">
        </ImageButton>
        <ImageButton android:text="Button_C" 
            android:background="@android:color/transparent" 
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:id="@+id/btn_C" 
            android:layout_width="wrap_content" 
            android:layout_gravity="right" 
            android:src="@drawable/drawer"
            android:onClick="btnCListener">
        </ImageButton>
    </LinearLayout>
</LinearLayout >

</RelativeLayout>
like image 401
Erik Avatar asked Jun 21 '11 16:06

Erik


People also ask

Which layout can be used as better replacement of RelativeLayout?

Note: For better performance and tooling support, you should instead build your layout with ConstraintLayout.

Which is better LinearLayout or RelativeLayout?

LinearLayout is less used as compared to RelativeLayout. RelativeLayout is used more in applications. We can use LinearLayout inside RelativeLayout. We can also use RelativeLayout as a Child of LinearLayout.

What is the use of layout_weight in android?

Layout Weight This attribute assigns an "importance" value to a view in terms of how much space it should occupy on the screen. A larger weight value allows it to expand to fill any remaining space in the parent view.


2 Answers

Stack 2 LinearLayout (L1, L2) sections with weights of 0.3 and 0.7 (and heights of 0dp) inside a LinearLayout (L0) with vertical orientation and total weight of 1.0. Put your buttons in the 0.7 weighted layout (L2). That will give you your spacing of 30% above the buttons.

You can then place the containing LinearLayout (L0) inside a RelativeLayout (R0) and place L0 relative to the right of the parent (R0), which will position the entire thing on the right side of the screen.

Edit: My version is pretty much same as Milde in end, except using a root of RelativeLayout so I could put the layout_alignParentRight="true" to ensure it's flush to the right. The only sticking point I found was ensuring your first LinearLayout has height of fill_parent so that your spacer really is 30% of screen.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent">
    <LinearLayout android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="wrap_content" android:weightSum="1.0" android:layout_alignParentRight="true">
        <LinearLayout android:layout_weight="0.3" android:layout_height="0dp" android:layout_width="0dp" />
        <LinearLayout android:layout_weight="0.7" android:layout_height="0dp" android:layout_width="wrap_content" android:orientation="vertical">
            <Button android:text="Button 1" android:layout_width="wrap_content" android:layout_height="wrap_content" />
            <Button android:text="Button 2" android:layout_width="wrap_content" android:layout_height="wrap_content" />
            <Button android:text="Button 3" android:layout_width="wrap_content" android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>
like image 160
Mark Fisher Avatar answered Oct 13 '22 21:10

Mark Fisher


Try this:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rightLinerLayoutL0"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <LinearLayout android:id="@+id/rightLinerLayoutL1" android:layout_weight="0.3" android:layout_width="fill_parent">
    </LinearLayout>
    <LinearLayout android:orientation="vertical" android:id="@+id/rightLinerLayoutL2" android:layout_weight="0.7" android:layout_width="fill_parent">
        <Button android:text="Button_A" android:layout_height="wrap_content" android:id="@+id/btn_A" android:layout_width="wrap_content" android:layout_gravity="right"></Button>
        <Button android:text="Button_B" android:layout_height="wrap_content" android:id="@+id/btn_B" android:layout_width="wrap_content" android:layout_gravity="right"></Button>
        <Button android:text="Button_C" android:layout_height="wrap_content" android:id="@+id/btn_C" android:layout_width="wrap_content" android:layout_gravity="right"></Button>
    </LinearLayout>
</LinearLayout >

enter image description here

like image 29
Milde Avatar answered Oct 13 '22 19:10

Milde