ЧРЕЗВЫЧАЙНО ПРОСТО андроид макет - PullRequest
0 голосов
/ 24 апреля 2011

Я знаю, что это должно быть просто. Это сводит меня с ума, хотя. Я пробовал столько дерьма, чтобы это выглядело хорошо, и НИЧЕГО НЕ РАБОТАЕТ !! : /

Вот моя проблема:

Я хочу, чтобы макет выглядел так:

Фиксированный заголовок с высотой, такой же, как изображение, помещенное слева. Справа от изображения я хочу простой текст, который может занимать 2 строки.

Под фиксированным заголовком мне нужна таблица типа:

----------------------------------
Birth date     |        09/23/1945
----------------------------------
Death date     |        04/27/2011
----------------------------------

и т.д.

В любой из этих строк текст может занимать 2 строки в зависимости от того, что находится в базе данных. Текст в первом столбце является статическим, в то время как текст во втором столбце является динамическим. Строки таблицы должны быть помещены в ScrollView (простая часть), чтобы он мог содержать много информации. Я попытался использовать TableLayout, и он вызывает у меня все виды головных болей. Также для фиксированного заголовка, я использовал весь RelativeLayout с layout_below и выше, чтобы это работало, но я не могу получить правильное расстояние между изображениями и текстом справа. Это такая головная боль! Спасибо за любую помощь!

Ответы [ 2 ]

3 голосов
/ 24 апреля 2011

Ну, я не понимаю на 100%, как это должно выглядеть, но помните, что вы можете вкладывать макеты, чтобы вы могли использовать что-то вроде

<LinearLayout 
    orientation="vertical" 
    width="match_parent" 
    height="wrap_content">

    <!-- header -->
    <LinearLayout 
        orientation="horizontal"
        width="match_parent" 
        height="wrap_content">

        <ImageView 
            width="wrap_content" 
            height="wrap_content">
        <TextView
            width="match_parent" 
            height="wrap_content"
            lines="2">
    </LinearLayout>

    <!-- Table here. You can use either TableLayout or nested LinearLayouts. 
         I prefer LinearLayouts. They have also a nice feature:
         <LinearLayout>
             <View width="match_parent" weight="1" />
             <View width="match_parent" weight="1" />
         </LinearLayout>
         ...makes both views equally wide, which you can use in your table. -->
</LinearLayout>

Может быть, я могу помочь больше, если вы дадите немногобольше информации о проблемах, с которыми вы сталкиваетесь.

[EDIT] ... или, как говорит bigstones в своем комментарии - вместо таблицы вы можете использовать ListView с пользовательским адаптером, что, вероятно, значительнолучшее решение:)

1 голос
/ 24 апреля 2011

Вот что я делаю.

row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical">
    <TextView
        android:id="@+id/left_text"
        android:layout_width="75dip"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/right_text"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:maxLines="2"
        android:ellipsize="end" />
</LinearLayout>

Главное приложение

public class Main extends Activity
{
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    List<Datum> data = new ArrayList<Datum>();
    data.add(new Datum("FIRST", "One line of text."));
    data.add(new Datum("SECOND", "Two lines of text.  Two lines of text.  Two lines of text."));
    data.add(new Datum("THIRD", "Three or more lines of text.  Three or more lines of text.  Three or more lines of text.  Three or more lines of text.  Three or more lines of text.  Three or more lines of text."));
    data.add(new Datum("FOURTH", "One line of text, again."));

    ListView leftList = (ListView) findViewById(R.id.my_list);
    leftList.setAdapter(new MyAdapter(this, R.layout.row, data));
  }
}

class Datum
{
  String left, right;

  Datum(String left, String right)
  {
    this.left = left;
    this.right = right;
  }
}

class MyAdapter extends ArrayAdapter<Datum>
{
  List<Datum> data;
  int textViewResourceId;

  MyAdapter(Context context, int textViewResourceId, List<Datum> data)
  {
    super(context, textViewResourceId, data);
    this.data = data;
    this.textViewResourceId = textViewResourceId;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent)
  {
    if (convertView == null)
    {
      LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      convertView = inflater.inflate(textViewResourceId, null);
    }
    Datum datum = data.get(position);
    if (datum != null)
    {
      TextView leftView = (TextView) convertView.findViewById(R.id.left_text);
      TextView rightView = (TextView) convertView.findViewById(R.id.right_text);
      if (leftView != null)
      {
        leftView.setText(datum.left);
      }
      if (rightView != null)
      {
        rightView.setText(datum.right);
      }
    }
    return convertView;
  }
}

image

...