Выравнивание элементов представления в LinearLayout - PullRequest
1 голос
/ 07 февраля 2010

Ненавижу задавать этот вопрос; по некоторым причинам я не могу понять это самостоятельно. У меня есть вертикальный LinearLayout, который содержит пользовательский вид, который я определил в моем приложении, и текстовое представление. Я бы хотел, чтобы мой пользовательский вид был выровнен в верхней части экрана, а текстовый вид выровнен в нижней части экрана. К сожалению, независимо от того, какие изменения я делаю в атрибутах XML-файла, мой пользовательский вид всегда, кажется, центрируется вертикально при запуске эмулятора. XML выглядит следующим образом:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" android:gravity="top">

    <CustomView
     android:id="@+id/customID"
        android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                tileSize="24"
                android:focusableInTouchMode="true" android:layout_gravity="top"/>

    <TextView
     android:id="@+id/text"
        android:text="@string/droidtactoe_layout_text"
        android:visibility="visible"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textSize="24sp" android:textColor="#00000000" android:layout_gravity="bottom"/>

</LinearLayout>

Ответы [ 2 ]

1 голос
/ 07 февраля 2010

Спасибо! Это была проблема в CustomView. Я использовал модифицированную версию переопределенного View из демонстрации Snake. Эта демонстрация использовала смещение X и Y, которое было определено в onSizeChanged на основе высоты и ширины представления. Затем я использовал эти смещения в методе onDraw для заполнения размеров объекта, который пытался нарисовать.

По причине, которая сейчас не имеет смысла для меня, я предположил, что ширина и высота представления будут ограничены в зависимости от содержимого, которое было написано в onDraw b / c установки размера и ширины макета в обернуть содержимое. Однако ширина и высота, которые передавались в onSizeChanged, были размерами всего экрана. В результате эти смещения заставили мой пользовательский вид заполнить весь экран. Я удалил смещения, и проблема, кажется, решена.

Опять же, большое спасибо!

1 голос
/ 07 февраля 2010

Во-первых, учитывая ваши правила («Я бы хотел, чтобы мой пользовательский вид был выровнен в верхней части экрана, а текстовый вид выровнен в нижней части экрана»), я бы рекомендовал RelativeLayout, так какэто будет проще.Просто используйте android:layout_alignParentTop="true" на CustomView и android:layout_alignParentBottom="true" на TextView и сбросьте все вещи gravity / layout_gravity.

Если ваш CustomView по-прежнему плохо себя ведет, временно замените егос Button или чем-то.Если Button затем выглядит так, как вы ожидаете, значит, что-то не так в реализации вашего CustomView.Если вы наследуете от реального View (например, CustomView является подклассом TextView), вы должны унаследовать все нужные функциональные возможности для раскладки.Если ваш CustomView является просто подклассом View, могут быть некоторые вещи, которые вам нужно переопределить или назвать такими, которые вы не делаете.Я не создал пользовательский подкласс View, только подклассы, такие как LinearLayout, поэтому я не уверен на 100%, чего вам не хватает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...