Skip to content Skip to sidebar Skip to footer

Bubble Chat Layout

I have an layout

Solution 1:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/background"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        <!-- android:layout_gravity="left" -->
        android:orientation="horizontal">

        <ImageView
                android:id="@+id/avatar"
                android:layout_width="32dip"
                android:layout_height="32dip"
                android:layout_marginRight="4dip"
                android:src="@drawable/controller"
        />

        <TextView
                android:id="@+id/text"
                android:text="asd"
                android:textColor="#FFFFFF"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5sp"
        />

</LinearLayout>

To set gravity in your Activity:

LinearLayoutlp= (LinearLayout) findViewById(R.id.background);
lp.setGravity(Gravity.RIGHT);
lp.setGravity(Gravity.Left);

So, the only thing that i changed is in your LinearLayout in XML file, change layout_width from fill_parent to wrap_content


EDIT: (due to more information)

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/background"android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_gravity="left"android:orientation="horizontal"><RelativeLayoutandroid:id="@+id/avatar2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_toRightOf="@id/text2"><ImageViewandroid:id="@+id/avatar"android:layout_width="32dip"android:layout_height="32dip"android:layout_marginRight="4dip"android:src="@drawable/controller"
                /></RelativeLayout><RelativeLayoutandroid:id="@+id/text2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_toLeftOf="@id/avatar"><TextViewandroid:id="@+id/text"android:text="asd"android:textColor="#FFFFFF"android:layout_width="wrap_content"android:layout_height="wrap_content"
                /></RelativeLayout></RelativeLayout>

So, use

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)yourLayout.getLayoutParams();
params.addRule(RelativeLayout.RIGHT_OF, R.id.id_to_be_left_of);
//params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of);
yourLayout.setLayoutParams(params); //causes layout update

Do not forget that dependencies cannot be circular

Solution 2:

Solution here

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/background"android:layout_width="fill_parent"android:layout_height="wrap_content"android:paddingRight="4dip"android:paddingBottom="4dip"android:background="@drawable/chat_bg">

<ImageView
    android:id="@+id/avatar"
    android:layout_width="32dip"
    android:layout_height="32dip"
    android:layout_marginLeft="4dip"
    android:src="@drawable/avatar_1_1"
    />

<TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/avatar"
    android:paddingLeft="4dip"
    />

And here java code :

RelativeLayout bg = (RelativeLayout)view.findViewById(R.id.background);         
        if (incoming) {
            textView.setBackgroundResource(R.drawable.speech_bubble_orange);

            bg.setGravity(Gravity.LEFT);
        } else {
            textView.setBackgroundResource(R.drawable.speech_bubble_green);

            LayoutParams avatarParams = (LayoutParams) avatarView.getLayoutParams();
            avatarParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
            avatarView.setLayoutParams(avatarParams);

            /*android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_toRightOf="@id/avatar"
                    android:paddingLeft="4dip"*/
            LayoutParams tvParam = (LayoutParams) textView.getLayoutParams();
            tvParam.removeRule(RelativeLayout.RIGHT_OF);
            tvParam.addRule(RelativeLayout.LEFT_OF, R.id.avatar);
            textView.setLayoutParams(tvParam);

            bg.setGravity(Gravity.RIGHT);
        }

Post a Comment for "Bubble Chat Layout"