2010-06-07 3 views
3

Мне нужно найти текст на виду:Android и Макеты

текст «Некоторые больше текста» должен быть расположен в нижней части | center_horizontal

текст «Краткий текст» должен быть расположен на с выравнивание по правому краю, а о 10% от верхней части экрана

текст «хххх» должны быть приведены в соответствие к центру экрана (справа/снизу ALIGN 1-го кватер)

текст «Некоторые длинный текст ..» должны быть приведены в соответствие на верхнюю/левую часть 3-го квадранта экрана, но он должен пересечь center_horizontal экрана.

+1

Это может помочь http://developer.android.com/resources/tutorials/views/hello-relativelayout.html – skyman

+0

Не могли бы вы работать на лучшую диаграмму ? –

+0

Что ты имеешь в виду? – davs

ответ

7

Вот пару быстрых руководящих принципов:

  1. Android Макеты, как правило, гораздо более глубоко вложенным, чем вы обычно ожидаете. Вы часто оказываетесь в «пустых» макетах, которые просто занимают место, чтобы другие элементы располагались правильно.
  2. RelativeLayout - ваш друг, когда вы выравниваете текст до определенного края.
  3. Используйте настройки заполнения, чтобы текст «немного от края».
  4. Гравитация выравнивает текст внутри этого TextView или кнопки.

Глядя снова я ваша диаграмма, я воспроизвел это так:

  1. начать с относительным макетом («fill_content»), который занимает весь экран.
  2. Поместите текст «короткий текст» и «еще какой-нибудь текст», привязав верх и низ.
  3. Поместите элемент с нулевой шириной со значением «centerInParent» для точки посередине на экране.
  4. Поместите оставшееся на предметы выше и выровняйте их с этой центральной точкой.

К сожалению, ничто в шаге 4 не работало правильно. Ничто, как «layout_below», не работало, когда ссылочный элемент был элементом CenterInParent. с относительными макетами к шагу 3. Оказывается, это связано с тем, что не удалось заполнить_содержание на верхнем уровне. Да, макеты сложны, и мне жаль, что для них не было отладчика.

Вот правильный вариант:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/r1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<TextView 
    android:id="@+id/short_text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Short Text" 
    android:gravity="right" 
    android:layout_marginTop="30dip" 
    android:layout_alignParentTop="true" /> 
<TextView 
    android:id="@+id/more_text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Some More Text" 
    android:gravity="center" 
    android:layout_alignParentBottom="true" /> 
    <TextView android:id="@+id/centerpoint" 
    android:layout_centerInParent="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:width="0dip" 
    android:height="0dip" 
    /> 
    <TextView android:id="@+id/run_fox" 
    android:text="Run, fox, run!" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@id/centerpoint" 
    android:layout_toLeftOf="@id/centerpoint" 
    /> 
<TextView 
    android:layout_below="@id/centerpoint" 
    android:text="The quick brown fox jumped over the lazy dog, who had been a frog, and then got features and ran slowly." 
    android:layout_alignRight="@id/centerpoint" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 
</RelativeLayout> 
+0

Вы имеете в виду, что я должен использовать, например, набор пустых TextViews и сделать их layout_width = "fill_parent" и layout_weight = "1", чтобы сделать вполне приемлемое дополнение? – davs

+0

Спасибо, Чарльз! Ты лучший из лучших !!!! Оно работает!! – davs

0

Если я правильно понимаю, что вы хотите, чтобы просто поставить серьезные строки на текстовом. Вы можете сделать это в XML. Удобный инструмент GUI для этого будет DroidDraw Вы можете запустить его в браузере или на рабочем столе. Я считаю, что это удобно для некоторых графических интерфейсов. Помимо этого вы можете нарисовать вид, что-то вроде этого ...

class DrawOnTop extends View { 
    public DrawOnTop(Context context) { 
      super(context); 
      // TODO Auto-generated constructor stub 
    } 
    @Override 
    public void onDraw(Canvas canvas) { 
     Paint paint = new Paint(); 
      paint.setStyle(Paint.Style.FILL); 
      paint.setColor(Color.RED); 
      paint.setTextSize(15); 
      Paint paint2 = new Paint(); 
      canvas.drawText("Test", 30, 30, paint); 
    } 
} 

В приведенном выше примере я определил новую краску. Это необходимо для настройки свойств текста. Я дал ему красный цвет и размер текста 15. Вы можете добавить и другие атрибуты. Я также нарисовал строку «Тест». Именно в координатах (30,30) это координаты x и y, где я хочу, чтобы Java рисовала его. Затем он использует атрибуты краски.

EDIT: эта страница может также иметь некоторую помощь http://developer.android.com/reference/android/graphics/Canvas.html

+0

Я не должен рисовать текст в определенном положении. (Если бы я этого хотел, я мог бы использовать AbsoluteLayout). Но мне нужно, чтобы мое приложение поддерживало многократные экраны – davs

+0

DroidDraw не поддерживает значения sevelav, например, layout_gravity (например, в XML я могу использовать layout_gravity = "bottom | center_horizontal") ... DroidDraw поддерживает только одно значение .... возможно Я что-то не понял? – davs

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