Должен ли это быть вид сетки? Будет ли работать ListView?
Я написал ListView и ListActivity, которые отображают два элемента в каждой строке. Я начал с предоставленного SDK макета simple_list_item_2.xml, в котором перечисляются два элемента в строке, но один помещается поверх другого (две строки), а во второй строке используется меньший шрифт. Я хотел, чтобы оба элемента находились в одной строке, один справа и один слева.
Сначала я скопировал файл simple_list_item_2.xml в каталог res/layout моего проекта под новым именем и изменил свойство android:mode="twoLine" на "oneLine", сохранив при этом имя элемента представления "TwoLineListItem". Затем я заменил два внутренних элемента на те, которые делали то, что я хотел.
В коде для инициализации списка я создал MatrixCursor и заполнил его нужными данными. Для поддержки двух элементов каждой строке в MatrixCursor требуется три столбца, один из которых является первичным ключом «_id», а два других столбца представляют собой элементы, которые я хотел отобразить. Затем я смог использовать SimpleCursorAdapter для заполнения и управления ListView.
XML-файл моего макета:
<?xml version="1.0" encoding="utf-8"?>
<TwoLineListItem
xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingTop="2dip"
android:paddingBottom="2dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:mode="oneLine"
>
<TextView
android:id="@android:id/text1"
android:gravity="left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6dip"
android:layout_marginTop="6dip"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<TextView
android:id="@android:id/text2"
android:gravity="right"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="6dip"
android:layout_marginTop="6dip"
android:layout_marginRight="6dip"
android:layout_toRightOf="@android:id/text1"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/MainFontColor"
/>
</TwoLineListItem>
Обратите внимание, что я использовал значения «left» и «right» android:gravity, чтобы сделать левый элемент выравниванием по левому краю, а правый элемент — по правому краю. Вам потребуются разные значения гравитации для вашего макета, а также вам потребуются свойства для управления размером левого элемента, который мне не нужен.
Метод в моем классе ListActivity, который инициализировал ListView:
private void initListView()
{
final String AuthorName = "Author: ";
final String CopyrightName = "CopyRight: ";
final String PriceName = "Price: ";
final String[] matrix = { "_id", "name", "value" };
final String[] columns = { "name", "value" };
final int[] layouts = { android.R.id.text1, android.R.id.text2 };
MatrixCursor cursor = new MatrixCursor(matrix);
DecimalFormat formatter = new DecimalFormat("##,##0.00");
cursor.addRow(new Object[] { key++, AuthorName, mAuthor });
cursor.addRow(new Object[] { key++, CopyrightName, mCopyright });
cursor.addRow(new Object[] { key++, PriceName,
"$" + formatter.format(mPrice) });
SimpleCursorAdapter data =
new SimpleCursorAdapter(this,
R.layout.viewlist_two_items,
cursor,
columns,
layouts);
setListAdapter( data );
} // end of initListView()
Параметр конструктора MatrixCursor представляет собой массив строк, определяющих порядок и имена столбцов в курсоре. Важно: Обязательно добавьте столбец «_id», без него MatrixColumn выдаст исключение и не будет работать!
Три переменные, mAuthor, mCopyright и mPrice, являются тремя элементами данных в моем классе ListAdaptor, и они инициализируются в другом месте. В моем реальном коде mAuthor фактически встроен в этот метод из списка имен авторов. Имена авторов объединяются в одну строку, используя «\n» в качестве разделителей между именами. Это приводит к тому, что имена нескольких авторов отображаются в разных строках одного и того же TextView.
Параметрами SimpleCursorAdapter ctor являются идентификатор представления, используемого для каждой строки списка, курсор, содержащий данные, массив строк, где каждый элемент представляет собой имя столбца из курсора (в порядке их получения) и соответствующий массив идентификаторов представления для использования представлением для каждого элемента в строке списка.
person
Steven F. Le Brun
schedule
13.03.2010