выровнять текстовое представление к родителю, используя код Java - PullRequest
0 голосов
/ 11 мая 2018

Адаптер

public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.MessageViewHolder>{
private List<Messages> mMessagesList;
private FirebaseAuth mAuth;

public class MessageViewHolder extends RecyclerView.ViewHolder{
    public TextView messageText;
    public MessageViewHolder(View view)
    {
        super(view);
        messageText = (TextView)view.findViewById(R.id.message_text_layout);
    }
}

public MessageAdapter (List<Messages>mMessagesList)

{
    this.mMessagesList = mMessagesList;
}

@Override
public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
    View V = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_chat_custom,parent,false);
    mAuth = FirebaseAuth.getInstance();
    return new MessageViewHolder(V);
}

@Override
public void onBindViewHolder(MessageViewHolder holder, int position) {

        String current_user_id = mAuth.getInstance().getCurrentUser().getUid();
        Messages messages = mMessagesList.get(position);
        String from_user = messages.getFrom();

    if (from_user!=null && from_user.equals(current_user_id)){
            holder.messageText.setBackgroundResource(R.drawable.text_background1);
            holder.messageText.setTextColor(Color.BLACK);

        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.messageText.getLayoutParams();
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        holder.messageText.setLayoutParams(params);

    }else {
            holder.messageText.setBackgroundResource(R.drawable.text_background2);
            holder.messageText.setTextColor(Color.BLACK);

        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.messageText.getLayoutParams();
        params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        holder.messageText.setLayoutParams(params);
        }

        holder.messageText.setText(messages.getMessage());
    }

@Override
public  int getItemCount() {
    return mMessagesList.size();
}


public void setMessagesList(List<Messages> mMessagesList) {
    this.mMessagesList = mMessagesList;
}

}

Настраиваемый макет

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

<TextView
    android:id="@+id/message_text_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:background="@drawable/messages_text_background"
    android:padding="10dp"
    android:text="Textview"
    android:textSize="20dp"
    android:textColor="@color/black"/>

</RelativeLayout>

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

1 Ответ

0 голосов
/ 11 мая 2018

у вас есть 2 возможных способа

Первый

Удалить

android:layout_alignParentStart="true"

из вашего TextView

Второй в вашем onBindViewHolder добавьте «removeRule», например, так:

params.removeRule(RelativeLayout.ALIGN_PARENT_START);

перед добавлением нового правила.

Вот код, на котором я тестировал:

Первый

        @Override
        protected void onBindViewHolder(IngredienteViewHolder holder, int position, Ingrediente model) {
            holder.name.setText(model.getName());
            holder.setIngrediente(model);
            if (position % 2 == 0){
                holder.name.setBackgroundColor(Color.BLACK);
                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)holder.name.getLayoutParams();
                params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
                holder.name.setLayoutParams(params); //causes layout update
            } else {
                holder.name.setBackgroundColor(Color.RED);
                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)holder.name.getLayoutParams();
                params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                holder.name.setLayoutParams(params); //causes layout update
            }
        }



<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/list_item_name"
              android:layout_width="wrap_content"
              android:layout_height="match_parent"
              android:textSize="@dimen/list_ingredienti_size"
              android:focusable="false"
              android:text="testo"
              android:textColor="@drawable/selected_textcolor"
              android:gravity="center"
              android:background="@drawable/selected_background"
        />
</RelativeLayout>

Второй

    @Override
    protected void onBindViewHolder(IngredienteViewHolder holder, int position, Ingrediente model) {
        holder.name.setText(model.getName());
        holder.setIngrediente(model);
        if (position % 2 == 0){
            holder.name.setBackgroundColor(Color.BLACK);
            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)holder.name.getLayoutParams();
            params.removeRule(RelativeLayout.ALIGN_PARENT_START);
            params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
            holder.name.setLayoutParams(params); //causes layout update
        } else {
            holder.name.setBackgroundColor(Color.RED);
            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)holder.name.getLayoutParams();
            params.removeRule(RelativeLayout.ALIGN_PARENT_START);
            params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
            holder.name.setLayoutParams(params); //causes layout update
        }
    }




<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/list_item_name"
              android:layout_width="wrap_content"
              android:layout_height="match_parent"
              android:layout_alignParentStart="true"
              android:textSize="@dimen/list_ingredienti_size"
              android:focusable="false"
              android:text="testo"
              android:textColor="@drawable/selected_textcolor"
              android:gravity="center"
              android:background="@drawable/selected_background"
        />
</RelativeLayout>
...