包含TextView的ListView和包含EditText的ListView不在同一行
ListView containing TextView and ListView containing EditText not on the same line
所以图片会让你更好地理解问题:
看,我在左侧 ListView
添加了 3 TextView
,在右侧 ListView
添加了 3 EditText
,但它们不在同一行。
那么我该如何解决呢?
我的相关问题XML:
<LinearLayout
android:id="@+id/inner_linear_layout_id"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
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_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
/>
<ListView
android:id="@+id/comments_list_view_id"
android:layout_width="0dp"
android:layout_height="wrap_content"
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);
date
是 TextView
而 commentText
是 EditText
.
好的,这是一种解决方案。当然还有很多其他可能的解决方案。
这是列表项的 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_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_datetime"
android:text="8:20p.m."
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/edit_comment"
android:text="no comment"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
这是主要 activity 的 XML,它实际上包含 ListView 本身。但它并不表示子项(列表项)的外观,因为这是由上面的 XML 定义的:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/my_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</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_width="match_parent"
android:layout_height="match_parent">
<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_width="fill_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/edit_comment1"
android:text="no comment"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<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_width="fill_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/edit_comment2"
android:text="no comment"
android:layout_alignParentRight="true"
android:layout_below="@+id/edit_comment1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<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_width="fill_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/edit_comment3"
android:text="no comment"
android:layout_alignParentRight="true"
android:layout_below="@+id/edit_comment2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
所以图片会让你更好地理解问题:
看,我在左侧 ListView
添加了 3 TextView
,在右侧 ListView
添加了 3 EditText
,但它们不在同一行。
那么我该如何解决呢?
我的相关问题XML:
<LinearLayout
android:id="@+id/inner_linear_layout_id"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
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_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
/>
<ListView
android:id="@+id/comments_list_view_id"
android:layout_width="0dp"
android:layout_height="wrap_content"
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);
date
是 TextView
而 commentText
是 EditText
.
好的,这是一种解决方案。当然还有很多其他可能的解决方案。
这是列表项的 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_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_datetime"
android:text="8:20p.m."
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/edit_comment"
android:text="no comment"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
这是主要 activity 的 XML,它实际上包含 ListView 本身。但它并不表示子项(列表项)的外观,因为这是由上面的 XML 定义的:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/my_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</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_width="match_parent"
android:layout_height="match_parent">
<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_width="fill_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/edit_comment1"
android:text="no comment"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<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_width="fill_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/edit_comment2"
android:text="no comment"
android:layout_alignParentRight="true"
android:layout_below="@+id/edit_comment1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<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_width="fill_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/edit_comment3"
android:text="no comment"
android:layout_alignParentRight="true"
android:layout_below="@+id/edit_comment2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>