2

my code This is an adapter and I want to align my layout dynamically to left and right in a list view...And null pointer exception is coming at relativeParams.leftMargin=80;

Java:

public View getView(int position, View view, ViewGroup parent)
    {
        ViewHolder viewHolder;
        ChatItem chatItem = getItem(position);
        viewAligned = view;
        if(view == null)
        {
            LayoutInflater layoutInflater = (LayoutInflater)  
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.cell_messages_layout, null);
            viewHolder = new ViewHolder();
            viewHolder.message = (TextView) view.findViewById(R.id.fromZoneMessage1);
            viewHolder.rl = (RelativeLayout) view.findViewById(R.id.messageLayout);
            view.setTag(viewHolder);
        }
        else
        {
            viewHolder = (ViewHolder) view.getTag();
        }

        viewHolder.message.setText(chatItem.getSenderMessage());
        if (chatItem.getAllignment() == 0)
        {
//          viewHolder.message.setGravity(Gravity.LEFT);
            viewHolder.message.setBackgroundResource(R.drawable.sent_message);
//          view.setBackgroundResource(R.drawable.sent_message);
        }
        else {
//          viewHolder.rl.setBackgroundResource(R.drawable.recieved_message);
//          view.holder.rl.set
//          viewHolder.message.setGravity(Gravity.RIGHT);
            viewHolder.message.setBackgroundResource(R.drawable.recieved_message);

            RelativeLayout.LayoutParams relativeParams = (RelativeLayout.LayoutParams) viewHolder.rl.getLayoutParams();
            relativeParams.leftMargin=80;
            viewHolder.rl.setLayoutParams(relativeParams);
//          LayoutParams lp = (LayoutParams) view.getLayoutParams();
        }
        return view;
    }

And my Layout is....

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/messageLayout" 
   >


    <TextView 
        android:id="@+id/fromZoneMessage1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:textSize="20dp"
        android:textStyle="bold"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginRight="10dp"
        android:padding="5dp"
        android:text="Hey Jack"
        />

</RelativeLayout>

Please somebody help me to put left margin for my view....

2 Answers2

1

I just type casted the view to Relative Layout and set its Gravity...For setting the parameters , means Margins I've taken another dummy Relative Layout inside of Main Relative layout and Adjusted it.

You can watch the below code and Relative layout

public View getView(int position, View view, ViewGroup parent)
    {
        ViewHolder viewHolder;
        ChatItem chatItem = getItem(position);
        viewAligned = view;
        if(view == null)
        {
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.cell_messages_layout, null);
            viewHolder = new ViewHolder();
            viewHolder.message = (TextView) view.findViewById(R.id.fromZoneMessage1);
            viewHolder.rl = (RelativeLayout) view.findViewById(R.id.messageLayout);
            view.setTag(viewHolder);
        }
        else
        {
            viewHolder = (ViewHolder) view.getTag();
        }

        viewHolder.message.setText(chatItem.getSenderMessage());
        if (chatItem.getAllignment() == 0)
        {

            viewHolder.message.setGravity(Gravity.LEFT);
            viewHolder.message.setBackgroundResource(R.drawable.recieved_message);
            ((RelativeLayout)view).setGravity(Gravity.RIGHT);
            android.widget.RelativeLayout.LayoutParams params = new LayoutParams(android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT, android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);
            params.leftMargin = 50;
            viewHolder.rl.setLayoutParams(params);

                    }
        else {
            viewHolder.message.setGravity(Gravity.LEFT);
            viewHolder.message.setBackgroundResource(R.drawable.sent_message);
            ((RelativeLayout)view).setGravity(Gravity.LEFT);
            android.widget.RelativeLayout.LayoutParams params = new LayoutParams(android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT, android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);
            params.rightMargin = 50;
            viewHolder.rl.setLayoutParams(params);
        }

        return view;
    }

Layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
   >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/messageLayout" 
       >


    <TextView 
        android:id="@+id/fromZoneMessage1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:textSize="20dp"
        android:textStyle="bold"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginRight="10dp"
        android:padding="5dp"
        android:text="Hey Jack"/>

</RelativeLayout>
</RelativeLayout>
0

Instead of using RelativeLayout.LayoutParams try to use AbsListView.LayoutParams as your view is in ListView.

Yogesh Narayanan
  • 866
  • 7
  • 10