How to set gravity to layout programmatically?

我怕爱的太早我们不能终老 提交于 2019-12-24 11:40:10

问题


I am creating a chat application in which i need to align the chat messages accordingly.I need to align those from the user to right side and others to the left side.I have a listview in which the messages are displayed.For now,i am using bundled json for getting data.Here is my code

This is for appending a string to the message typed by the user which is checked and splitted inorder to recognize messages from the user.

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();


             }

After that, i am splitting the string and stored in an array.If the message is from user.ie,if it has the appended string,then the gravity of the layout need to be set to RIGHT,else LEFT. I used this code in my adapter class for this

    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);

What is wrong in this ?Please help...

Here is my 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>

回答1:


since you want to align chat messages to left and right therefore you need to align your text messages i.e your text view. therefore you need to do

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



回答2:


In your adapter, you should be setting the other case in else condition as well. Example is below.

I saw you are using wrap_content for your width. So your LinearLayout will wrap your content and can't align to left or right of your layout. You should use fill parent for your LinearLayout in order it to align it's contents if there is sufficient space

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));
    }



回答3:


The problem is you are setting the layout gravity right.. try setting the textview gravity left or right..

just add the property in the xml android:gravity="left" or android:gravity="right"



来源:https://stackoverflow.com/questions/23211166/how-to-set-gravity-to-layout-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!