动态创建线性布局

时间:2017-02-09 02:32:18

标签: java android xml

基本上,我在一个循环中逐个读取来自firebase数据库的消息,之后,我想将每条消息添加到线性布局中。

我有一个名为my_linear_layout的线性布局XML文件 IMAGE SAMPLE

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/layout2"
android:layout_marginTop="20dp"
android:orientation="horizontal"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:layout_weight="6"
    android:background="@drawable/rounded_corner"
    android:padding="16dp"
    android:text="MESSAGE GOES HERE. IT CAN BE A LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONG MESSAGE"
    android:textColor="#000" />


<ImageView

    android:layout_width="40dp"
    android:layout_height="40dp"
    android:layout_marginTop="0dp"
    android:layout_weight="3"
    android:src="@drawable/senduser" />

</LinearLayout>

现在,想要在我的活动的相对布局

中夸大此布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:background="#ffffff"
android:orientation="vertical"
tools:context=".BuyerChat">

<ScrollView
    android:layout_width="match_parent"
    android:layout_weight="20"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin">


    </RelativeLayout>
</ScrollView>

<include
    layout="@layout/type_message_area"
    android:layout_width="match_parent"
    android:layout_weight="1"
    android:layout_height="wrap_content"
    android:gravity="bottom" />
</LinearLayout>

我不能在这里添加代码,因为我想拥有n个线性布局,具体取决于我有多少条消息。基本上,我从firebase数据库读取消息,之后,我想将每条消息添加到线性布局。

所以,我想要一个代码片段,它允许我每次调用它时添加线性布局,并且每次都以线性布局放置一条新消息。

我已经有一段时间了,请帮忙。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 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:background="#ffffff"
    android:orientation="vertical"
    tools:context=".BuyerChat">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_weight="20"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/dynamic_holder"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin">


        </LinearLayout>
    </ScrollView>

    <include
        layout="@layout/type_message_area"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:gravity="bottom" />
    </LinearLayout>

在你的活动中:

LinearLayout dynamicHolder = (LineraLayout) findViewById(R.id.dynamic_holder);

for(int i = 0; i<your_message_length; i++){
    View dynamicView = LayoutInflater.from(context).inflate(R.layout.my_linear_layout, null, false);
    TextView yourTextView = (TextView) dynamicView.findViewById(R.id.your_tv_id);//give id to your textview in my_linear_layout
    youtTextView.setText(your_each_message_from_db);

    dynamicHolder.addView(dynamicView);
}

答案 1 :(得分:0)

为什么使用线性布局而不是listview 在这种情况下强烈建议使用ListView。

请参阅here listViews与linearLayout相比效率如何 另外它更容易使用。
ListViews不会对所有项目进行充气,但是它们会膨胀,但是一次可以将多个项目放在页面上。有或没有分页的最快选项是ListView。

请参阅此处如何开始使用listView进行聊天应用 Simple chat application using listview in android

我建议你为ListView创建自定义适配器。您只需要检查条件以更改getViews()方法中布局/视图的背景。

某些帖子可能对您有所帮助:

The World of List View
Android Implementing Chat Bubble in ListView