Android и макеты - PullRequest
       18

Android и макеты

3 голосов
/ 07 июня 2010

Мне нужно найти текст для просмотра:

текст «Еще немного текста» должен располагаться внизу | center_horizontal

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

текст 'x.x.x.x' должен быть выровнен по центру экрана (правое / нижнее выравнивание 1-го квартала)

текст 'Некоторый длинный текст ..' должен быть выровнен по верхнему / левому краю 3-го квартала экрана, но он должен пересекать центр_ горизонтали экрана.

Ответы [ 2 ]

7 голосов
/ 07 июня 2010

Вот пара кратких рекомендаций:

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

Еще раз посмотрев на вашу диаграмму, я воспроизвел ее следующим образом:

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

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

Вот правильная версия:

<?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 голосов
/ 07 июня 2010

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

   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 нарисовала их. Затем он использует атрибуты краски.

РЕДАКТИРОВАТЬ: эта страница также может быть полезна http://developer.android.com/reference/android/graphics/Canvas.html

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