Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android LinearLayout - ImageView gets pushed off the screen

I use the layout posted below to show messages by inflating that layout as a row into a ListView. The problem is that it works fine with a single-line message but when there are 2 lines or more the ImageView indicating the message state gets pushed off the screen, can't get the reason. Any ideas? Layout code and screenshot below.

enter image description here

That is the inflated layout:

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

<TextView
    android:id="@+id/tvTimestamp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:text="TextView"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textSize="8sp" />

<LinearLayout
    android:id="@+id/rl_message_holder"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:layout_toRightOf="@+id/tvTimestamp"
    android:background="@drawable/outgoing_bg"

    android:orientation="horizontal" >

    <TextView
        android:id="@+id/tvMessageOutgoing"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="4dp"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <ImageView
        android:id="@+id/imgMessageState"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_gravity="bottom"
        android:src="@drawable/ic_launcher" />

  </LinearLayout>

 </RelativeLayout>
like image 495
Droidman Avatar asked Jan 31 '13 09:01

Droidman


3 Answers

change you linear layout width fill_parent

and add android:layout_weight="1" in textview

like image 93
Anand Avatar answered Nov 15 '22 09:11

Anand


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="5dp" >

    <TextView
        android:id="@+id/tvTimestamp"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="20"
        android:gravity="center_vertical"
        android:text="10:20pm"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textSize="8sp" />

    <RelativeLayout
        android:id="@+id/rl_message_holder"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="80" >

        <TextView
            android:id="@+id/tvMessageOutgoing"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/imgMessageState"
            android:padding="4dp"
            android:singleLine="false"
            android:text="android developer tutorial in the world"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <ImageView
            android:id="@+id/imgMessageState"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_gravity="bottom"
            android:contentDescription="@string/app_name"
            android:src="@drawable/ic_launcher" />
    </RelativeLayout>

</LinearLayout>
like image 33
Venkatesh S Avatar answered Nov 15 '22 10:11

Venkatesh S


This worked for me

<TextView
        android:id="@+id/tvMessageOutgoing"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="4dp"
        android:layout_weight="1"
        android:text="Medium Tesssssssssssssssssssssssssssssseeeeeeeessssxt"
        android:textAppearance="?android:attr/textAppearanceMedium" />

It gives the textview the remaining space.

like image 32
Stephan Celis Avatar answered Nov 15 '22 09:11

Stephan Celis