Android Studio ListView项目重力 [英] Android Studio ListView items gravity

查看:63
本文介绍了Android Studio ListView项目重力的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望列表视图中的项目看起来像Messenger中的对话.

I want to have my items in listview looking like a conversation in messenger.

有简单的接收消息代码:

There is simple code of recieving messages:

if (arrayList2.get(y).toString().equals(myEmail)) {
    arrayList.add(arrayList2.get(k).toString());

} else if (arrayList2.get(y).toString().equals(recipientEmail)) {
    arrayList.add(arrayList2.get(k).toString());
}

arrayAdapter.notifyDataSetChanged();

array.get.....equals(myEmail)时,消息是从我这里来的,因此它们应保持原样.当...equals(recipientEmail)时,我希望文本位于屏幕/或列表视图的右侧,并具有图像背景,就像在信使中通常使用的那样

When array.get.....equals(myEmail), the messages are from me so, they should stay like they are. When ...equals(recipientEmail), I want text to be on the right of the screen/or listview and have an background of image, like classically in messenger

推荐答案

以下是完整的示例.

可绘制资源:

activity_main.xml:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.andrii.myapplication.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/chat"
        android:background="@color/colorAccent"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>
</RelativeLayout>

消息布局看起来像这样(message.xml):

Message layout will looks like so (message.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <FrameLayout
        android:id="@+id/container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="15dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:paddingRight="10dp"
        android:background="@drawable/in_9">
        <TextView
            android:id="@+id/message"
            android:textSize="18sp"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:breakStrategy="balanced"
            android:maxWidth="200dp"
            android:text="test"
            />
    </FrameLayout>
</LinearLayout>

最后进入MainActivity.java:

And finally in MainActivity.java :

package com.example.andrii.myapplication;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.LinkedList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List<Message> list=  new LinkedList<>();
        list.add(new Message(true, "hi"));
        list.add(new Message(false, "hello"));
        list.add(new Message(true, "how are you"));
        list.add(new Message(false, "I'm fine"));
        list.add(new Message(false, "Test test test test test"));
        RecyclerView view = (RecyclerView) findViewById(R.id.chat);
        view.setLayoutManager(new LinearLayoutManager(this));
        view.setAdapter(new ChatAdapter(this, list));
    }

    private class Message {
        private boolean misMine;
        private String mMessage;
        public Message (boolean mine, String message) {
            misMine = mine;
            mMessage = message;
        }
        public boolean isMine() { return misMine; }
        public String getMessage() { return mMessage; }
    }


    private class MessageViewHolder extends RecyclerView.ViewHolder {
        private View mContainer;
        private TextView mMessage;

        public MessageViewHolder(View itemView) {
            super(itemView);
            mMessage = (TextView) itemView.findViewById(R.id.message);
            mContainer = itemView.findViewById(R.id.container);
        }

        public void setMessage(String message) {
            mMessage.setText(message);
        }

        public void setMine(boolean isMine) {
            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mContainer.getLayoutParams();
            params.gravity = isMine ? Gravity.RIGHT : Gravity.LEFT;

            mContainer.setBackgroundResource(isMine ? R.drawable.out_9 : R.drawable.in_9 );
            mContainer.setLayoutParams(params);
        }
    }

    private class ChatAdapter extends RecyclerView.Adapter<MessageViewHolder> {
        private List<Message> mMessages;

        public ChatAdapter(Context context, List<Message> list) {
            mMessages = list;
        }

        @Override
        public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message, parent, false);

            MessageViewHolder holder = new MessageViewHolder(view);

            return holder;
        }

        @Override
        public void onBindViewHolder(MessageViewHolder holder, int position) {
            Message  message =  mMessages.get(position);

            holder.setMessage(message.getMessage());
            holder.setMine(message.isMine());
        }

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

上面的代码的结果:

这篇关于Android Studio ListView项目重力的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆