Deb
Deb

Reputation: 2451

ImageView inside LinearLayout does not show when "android:layout_weight" on LinearLayout

Here is my Code

<LinearLayout android:layout_width="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:layout_height="wrap_content">
        <RadioButton android:id="@+id/preference_question_optionTwo" android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>
         <LinearLayout 
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
            <TextView 
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"/>
        </LinearLayout>
    </LinearLayout>

Now here when i apply android:layout_weight="1" on LinearLayout the image does not appear.Without this property image is displayed.

What i want is to divide the layout into two parts. Both parts containing the same code above i.e a radio button and besides that an image and a text

Update This is how i want it

enter image description here

This is what i am getting as output enter image description here

Upvotes: 0

Views: 1400

Answers (3)

Eran Goldin
Eran Goldin

Reputation: 979

The layout weight property is for elements within a linear layout. You should give each half of the screen the same weight and put them both within a linear layout.

Here's what you need:

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

<!-- first half -->
<LinearLayout android:layout_width="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:layout_height="wrap_content">
        <RadioButton android:id="@+id/preference_question_optionTwo" android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
         <LinearLayout 
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
            <TextView 
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"/>
        </LinearLayout>
    </LinearLayout>

<!-- first half, same weight as first half -->
<LinearLayout android:layout_width="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:layout_height="wrap_content">
        <RadioButton android:id="@id/preference_question_optionTwo" android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
         <LinearLayout 
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
            <TextView 
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"/>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

Upvotes: 1

yildirimyigit
yildirimyigit

Reputation: 3022

You didn't share the rest of your code or your intentions on how you want to divide the screen into two: vertically or horizontally.

<LinearLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <LinearLayout android:layout_width="0dp"
        android:orientation="horizontal"
        android:layout_height="match_parent" 
        android:layout_weight="1" >
        <RadioButton android:id="@+id/preference_question_optionOne" android:layout_width="wrap_content"
            android:layout_height="match_parent"/>
        <LinearLayout 
            android:layout_height="match_parent"
            android:layout_width="wrap_content"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
           <TextView 
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"/>
        </LinearLayout>
    </LinearLayout>

    <LinearLayout android:layout_width="0dp"
        android:orientation="horizontal"
        android:layout_height="match_parent"
        android:layout_weight="1" >
        <RadioButton android:id="@+id/preference_question_optionTwo" android:layout_width="wrap_content"
            android:layout_height="match_parent"/>
        <LinearLayout 
            android:layout_height="match_parent"
            android:layout_width="wrap_content"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
           <TextView 
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"/>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

It seems that you got confused by the weight concept. It will be more clear this way, I guess. You should divide the parent's width or height according to those weights. Also don't forget to use it with 0dp.

If you want to divide the parent vertically, use this combination:

android:layout_height="0dp"
android:layout_width="match_parent" <!--or wrap_content-->
android:layout_weight="x"

and for horizontally

android:layout_height="match_parent" <!--or wrap_content-->
android:layout_width="0dp"
android:layout_weight="x"

Upvotes: 3

Roman Black
Roman Black

Reputation: 3497

If You need to divide Your layout in two parts with the same width, you need to set childs width to fill_parent and set the same wieght (> 1) to children.

For example:

<LinearLayout android:layout_width="wrap_content"
    android:orientation="horizontal"
    android:layout_height="wrap_content">
    <RadioButton android:id="@+id/preference_question_optionTwo" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
     <LinearLayout 
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_weight="1"
        android:orientation="vertical">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />
        <TextView 
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"/>
    </LinearLayout>
</LinearLayout> 

Upvotes: 0

Related Questions