Как установить гравитацию для макета программно?

Я создаю приложение чата, в котором мне нужно соответствующим образом выровнять сообщения чата. Мне нужно выровнять их от пользователя к правой стороне, а другие к левой стороне. У меня есть просмотр списка, в котором отображаются сообщения. На данный момент я Я использую JSON в комплекте для получения данных. Вот мой код

Это для добавления строки к сообщению, набранному пользователем, которая проверяется и разделяется для того, чтобы распознавать сообщения от пользователя.

final EditText et = (EditText)findViewById(R.id.EditText1);
final Button imb=(Button)findViewById(R.id.btn_send);
            imb.setOnClickListener(new OnClickListener()
            {
             @Override
             public void onClick(View arg0) 
             { 
                  String str = et.getText().toString()+":aeiou";
                  web.add(str);
                  scrollMyListViewToBottom();
                  et.setText(" ");
                  adapter.notifyDataSetChanged();


             }

После этого я разделяю строку и сохраняю ее в массиве. Если сообщение отправлено из user.ie, если в нем есть добавленная строка, тогда гравитация макета должна быть установлена ​​в положение RIGHT, иначе LEFT. Я использовал этот код в своем классе адаптера для этого

    mychat=web.get(position);
if(mychat.contains(":"))
{
    String[] splitted = mychat.split(":");
    String chats;

    if(splitted[1].equalsIgnoreCase("aeiou"))
    {

       chats=splitted[0];
       Toast.makeText(context, "You entered...."+chats, Toast.LENGTH_SHORT).show();
       LinearLayout my_layout = (LinearLayout) rowView.findViewById(R.id.main_layout);

       LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
       params.gravity = Gravity.RIGHT;
       my_layout.setLayoutParams(params);


      //my_layout.setGravity(Gravity.RIGHT);

      txtTitle.setText(chats);
    }   
}
else
    {
    txtTitle.setText(web.get(position));
    }




txtTitle.setBackgroundResource(R.drawable.test);

Что не так в этом? Пожалуйста, помогите...

Вот мой xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#2a2a34"
    android:padding="3dp"
    android:orientation="vertical" >

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


        <RelativeLayout
        android:id="@+id/chat_icon_layout"
            android:layout_width="match_parent"
            android:layout_weight="4"
            android:layout_height="match_parent" >

            <ImageView
                android:id="@+id/img"
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:src="@drawable/white" />

            <ImageView
                android:id="@+id/img1"
                android:layout_width="55dp"
                android:layout_height="55dp"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:src="@drawable/abs__ab_bottom_solid_light_holo" />

            </RelativeLayout>

        <LinearLayout
            android:id="@+id/chat_text_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="0dp"
            android:layout_weight="1" >

                    <TextView
                     android:id="@+id/txt"
                     android:layout_width="fill_parent"
                     android:layout_height="wrap_content"
                     android:text="Message"
                     android:textAppearance="?android:attr/textAppearanceSmall"
                     android:textColor="#ffffff" />

            </LinearLayout>


    </LinearLayout>

</LinearLayout>

3 ответа

Решение

Поскольку вы хотите выровнять сообщения чата по левому и правому краям, вам необходимо выровнять текстовые сообщения, т.е. текстовое представление. Поэтому вам нужно сделать

if(...)
  txtTitle.setText(chats);
txtTitle.setGravity(Gravity.RIGHT);
    }   
}
else
    {
    txtTitle.setText(web.get(position));
txtTitle.setGravity(Gravity.LEFT);
    }

В вашем адаптере вы должны также установить другой случай в другое состояние. Пример ниже.

Я видел, что вы используете wrap_content для вашей ширины. Таким образом, ваш LinearLayout обернет ваш контент и не сможет выровняться по левому или правому краю вашего макета. Вы должны использовать fill parent для вашего LinearLayout, чтобы выровнять его содержимое, если есть достаточно места

if(splitted[1].equalsIgnoreCase("aeiou"))
        {

           chats=splitted[0];
           Toast.makeText(context, "You entered...."+chats, Toast.LENGTH_SHORT).show();
           LinearLayout my_layout = (LinearLayout) rowView.findViewById(R.id.main_layout);

           LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
           params.gravity = Gravity.RIGHT;
           my_layout.setLayoutParams(params);

          //my_layout.setGravity(Gravity.RIGHT);

          txtTitle.setText(chats);
        }   
    }
    else{
         LinearLayout my_layout = (LinearLayout)rowView.findViewById(R.id.main_layout);    
         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
              LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
         params.gravity = Gravity.LEFT;
         my_layout.setLayoutParams(params);
         txtTitle.setText(web.get(position));
    }

Проблема в том, что вы устанавливаете гравитацию макета вправо.. попробуйте установить гравитацию TextView влево или вправо.

просто добавьте свойство в xml android:gravity="left" или android:gravity="right"

Другие вопросы по тегам