Использование пользовательских макетов в Java и XML - PullRequest
0 голосов
/ 23 апреля 2020

Я создаю приложение для чата в Android Studio и написал пару XML файлов макетов для отображения сообщений:

bubble_send. xml

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

    <TextView
        android:id="@+id/bubble_send_user"
        android:layout_alignParentLeft="true"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxWidth="300dp"
        android:padding="10dp"
        android:layout_margin="16dp"
        android:textAlignment="center"
        android:textSize="16dp"
        android:text="Me" />

    <TextView
        android:id="@+id/bubble_send_text"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxWidth="300dp"
        android:background="@drawable/bubble_send_bg"
        android:padding="10dp"
        android:layout_margin="16dp"
        android:textAlignment="center"
        android:textSize="24dp"
        android:text="Dummy text send" />

</RelativeLayout>

и bubble_receive. xml, что в основном совпадает, за исключением выравнивания по-разному.

Я хочу изменить текстовые значения обоих TextView в RelativeLayout с помощью Java, а затем добавить весь RelativeLayout в качестве сообщения кадр в вертикально выровненном LinearLayout в чате.

Я уже пытался исследовать этот вопрос, но я могу найти решения только с использованием ListView и RecyclerView вместо LinearLayout, которые не подходят для моей задачи.

Как я могу go об этом?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Что вам нужно сделать, это создать пользовательское представление, которое будет наследовать RelativeLayout. Если вы кодируете в Java, вы должны написать что-то вроде этого.

public class MyView extends RelativeLayout {

    private TextView sendUserBubble;

    public MyView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyView(Context context) {
        super(context);
        ini();
    }

    private void initView() {
        // Pass your xml layout here that you already created
        inflate(getContext(), R.layout.your_custom_layout, this);
        sendUserBubble = findViewById(R.id.bubble_send_user);
    }
    public void setSendTextUser(String text) {
        sendUserBubble.setText(text)
    }

После этого вы используете это в файле активности чата xml, что-то вроде этого:

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

    <MyView
        android:id="@+id/my_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

И укажите это в своем коде активности:

MyView view = findViewById(R.id.my_view)
view.setSendTextUser("My awesome text")
0 голосов
/ 23 апреля 2020

Возьмите вложенный вид прокрутки, добавьте к нему родительский линейный макет, затем всякий раз, когда вы получаете сообщение, попробуйте создать дочерний линейный макет с двумя наборами текстовых сообщений в текстовое представление, а затем добавьте к дочернему линейному макету. Вид прокрутки - Родительский линейный макет с вертикальной ориентацией- (Child1 Text11 Text12) (Child2 Text21 Text22) .............?

...