2010-02-07 4 views
1

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

<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> 

ответ

1

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

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

1

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

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

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

Смежные вопросы