包含 TextView 的 ListView 和包含 EditText 的 ListView 不在同一行

Posted

技术标签:

【中文标题】包含 TextView 的 ListView 和包含 EditText 的 ListView 不在同一行【英文标题】:ListView containing TextView and ListView containing EditText not on the same line 【发布时间】:2015-09-30 08:45:13 【问题描述】:

所以图片会让你更好地理解问题:

看,我在左侧添加了 3 个 TextView ListView 和 3 个 EditText 到右侧 ListView,但它们不在同一行。 那我该如何解决呢?

我与问题 XML 相关:

 <LinearLayout
            android:id="@+id/inner_linear_layout_id"
            android:layout_
            android:layout_
            android:layout_below="@id/date_picker_id"
            android:baselineAligned="false"
            android:orientation="horizontal"
            android:weightSum="1" >

        <ListView
            android:id="@+id/dates_list_view_id"
            android:layout_
            android:layout_
            android:layout_weight="0.5" 
            />

        <ListView
            android:id="@+id/comments_list_view_id"
            android:layout_
            android:layout_
            android:layout_weight="0.5" 
            />
    </LinearLayout>

我与Java相关的问题:

arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,datesListView.getId());
datesListView.setAdapter(arrayAdapter);
commentsListView.setAdapter(arrayAdapter);


date.setTextSize(20);
datesListView.addFooterView(date);
commentText.setId(998);
commentText.setInputType(EditorInfo.TYPE_CLASS_TEXT);       
commentText.setHint("Add a comment");
commentText.setTextSize(15);

commentsListView.addFooterView(commentText); 

dateTextViewcommentTextEditText

【问题讨论】:

日期时间和评论是一个元组。因此,您应该有一个 ListView,而每个 ListItem 是一个由日期时间和评论的 EditText 组成的视图。使用 RelativeLayout 和 toLeftOf 等在 ListItem 内正确对齐。 @Matthias 视图如何同时包含 TextView 和 EditText 视图? 查看我的回答帖子 【参考方案1】:

好的,这是一个解决方案。当然还有很多其他可能的解决方案。

这是列表项的 XML。它描述了列表中单个条目的视图。这里它是用一个 TextView 和一个 EditText 构建的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_
              android:layout_>

    <TextView
            android:id="@+id/text_datetime"
            android:text="8:20p.m."
            android:layout_
            android:layout_/>

    <EditText
            android:id="@+id/edit_comment"
            android:text="no comment"
            android:layout_weight="1"
            android:layout_
            android:layout_/>

</LinearLayout>

这是实际包含 ListView 本身的主要活动的 XML。但它并不表示子项(列表项)的外观,因为这是由上面的 XML 定义的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_
              android:layout_
        >
    <ListView
            android:id="@+id/my_list"
            android:layout_
            android:layout_
            />
</LinearLayout>

这就是 MainActivity 的代码,其中包括一些绑定到 ListView 的演示数据。这实际上将 ListView 与其项目和 ListView 项目的相应 XML 连接起来:

package com.example.myapp;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.*;

public class MyActivity extends Activity 

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ListView list = (ListView)findViewById(R.id.my_list);
        if (list != null) 
            final List<DemoItem> demoList = new ArrayList<DemoItem>();

            final SimpleDateFormat hourDateFormat = new SimpleDateFormat("HH:mm", Locale.getDefault());
            final Calendar c = Calendar.getInstance();
            final Date now = c.getTime();
            final String now_ = hourDateFormat.format(now);

            demoList.add(0, new DemoItem(now_, "first comment"));
            demoList.add(1, new DemoItem(now_, "second comment"));
            demoList.add(2, new DemoItem(now_, "third comment"));

            DemoAdapter adapter = new DemoAdapter(this, demoList);
            list.setAdapter(adapter);
        
    

    class DemoItem 
        public String datetime;
        public String comment;

        public DemoItem(String datetime, String comment) 
            this.datetime = datetime;
            this.comment = comment;
        
    

    class DemoAdapter extends ArrayAdapter<DemoItem> 

        public DemoAdapter(Context context, List<DemoItem> items) 
            super(context, R.layout.list_item, items);
        

        @Override
        public View getView(int position, View convertView, ViewGroup parent) 

            if (convertView == null)
                convertView = getLayoutInflater().inflate(R.layout.list_item, null);

            DemoItem item = super.getItem(position);

            EditText editComment = (EditText)convertView.findViewById(R.id.edit_comment);
            if (editComment != null)
                editComment.setText(item.comment);

            TextView txtDatetime = (TextView)convertView.findViewById(R.id.text_datetime);
            if (txtDatetime != null)
                txtDatetime.setText(item.datetime);

            return convertView;
        
    

最后是这样的:

如果您不使用 ListView,那么这里有一个可以做同样事情的 RelativeLayout。但它不是动态的,也没有绑定到任何适配器:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_
              android:layout_>

    <TextView
            android:id="@+id/text_datetime1"
            android:text="8:20p.m."
            android:layout_toLeftOf="@+id/edit_comment1"
            android:layout_alignBaseline="@+id/edit_comment1"
            android:layout_
            android:layout_/>

    <EditText
            android:id="@+id/edit_comment1"
            android:text="no comment"
            android:layout_alignParentRight="true"
            android:layout_
            android:layout_/>

    <TextView
            android:id="@+id/text_datetime2"
            android:text="8:20p.m."
            android:layout_toLeftOf="@+id/edit_comment2"
            android:layout_alignBaseline="@+id/edit_comment2"
            android:layout_
            android:layout_/>

    <EditText
            android:id="@+id/edit_comment2"
            android:text="no comment"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/edit_comment1"
            android:layout_
            android:layout_/>

    <TextView
            android:id="@+id/text_datetime3"
            android:text="8:20p.m."
            android:layout_toLeftOf="@+id/edit_comment3"
            android:layout_alignBaseline="@+id/edit_comment3"
            android:layout_
            android:layout_/>

    <EditText
            android:id="@+id/edit_comment3"
            android:text="no comment"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/edit_comment2"
            android:layout_
            android:layout_/>

</RelativeLayout>

【讨论】:

哇,谢谢。当我有时间的时候,我会复习一遍。谢谢。但是您可以将 EditText 向右填充更多? 您可以使用 android:layout_weight 来处理这两个项目。重量越高,物品使用的空间就越多。 非常感谢,您帮了大忙。 有什么方法可以聊天吗?我遇到了麻烦?

以上是关于包含 TextView 的 ListView 和包含 EditText 的 ListView 不在同一行的主要内容,如果未能解决你的问题,请参考以下文章

Android在drawerlayout的listview底部添加textview

Ellipsize 不适用于自定义 listView 中的 textView

来自 URL 和 TextView 的带有 ImageView 的 ListView 不起作用

ListView 使 textview 在超出屏幕可见性时可见

自定义listview android中的textview不稳定

重新排序 ListView 项的动画