Урок 6. Виды Layouts. Ключевые отличия и свойства.

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение damager82 » 11 авг 2011, 03:00

Расположение View-элементов на экране зависит от ViewGroup (Layout), в которой они находятся. В этом уроке мы рассмотрим основные виды Layout.
LinearLayout – отображает View-элементы в виде одной строки (если он Horizontal) или одного столбца (если он Vertical). Я использовал это на прошлом уроке, когда демонстрировал использование layout-файлов при смене ориентации.
TableLayout – отображает элементы в виде таблицы, по строкам и столбцам.
RelativeLayout – для каждого элемента настраивается его положение относительно других элементов.
AbsoluteLayout – для каждого элемента указывается явная позиция на экране в системе координат (x,y)
Рассмотрим эти виды


Click here to read this article!
Последний раз редактировалось damager82 26 июл 2017, 17:39, всего редактировалось 19 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Jack_killer
Сообщения: 21
Зарегистрирован: 30 янв 2012, 21:15

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение Jack_killer » 30 янв 2012, 23:24

Уж не понимаю, то-ли у меня какой-то глюк с Еклипсом, толи у Гугла проблемы с кодом, но у меня нормально кнопки не расположились после копи-паста, порывшись нашел такое исправление:
Было:

Код: Выделить всё

android:layout_below="@id/label"/>
Сделал:

Код: Выделить всё

android:layout_below="@+id/label"/>
то-есть объявляли ID как @+id/label, а в примере указывает на ID @id/label без плюсика.

и так во всех layout-ах

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение damager82 » 01 фев 2012, 15:04

Точно. Есть такая проблема. А раньше ее не было.
Видать какое-то из обновлений ADT плагина поменяло алгоритм парсинга ...

Спасибо, что указали! Ща подумаю, как подправить текст.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

ShortyGuard
Сообщения: 1
Зарегистрирован: 26 июн 2012, 19:31

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение ShortyGuard » 26 июн 2012, 19:51

Как сделать, чтобы динамически наполняемый Layout в виджете автоматически скроллировался и показывал последний добавленный элемент снизу?

Идея такова:
В виджете ограничен layout-ами и работать динамически могу через remoteViews.addView, поэтому создан например
<LinearLayout android:id="@+id/layout"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:orientation="vertical" android:layout_gravity="bottom|right" />

обновление стандартно через appWidgetManager.updateAppWidget

а RemoteViews собираю динамически, т.е. через remoteViews.addView добавляю еще RemoteViews:
remoteViews.addView(R.id.layout, nestedView);
в моем случае nestedView состоит из одного TextView:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tvLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Layout with TextView">
</TextView>

Все хорошо пока размера Layout хватает, а потом добавляемые нижние nestedView "уходят за нижние пределы Layout, а хотелось бы, чтобы ранеедобавленные "уходили" за верхние пределы Layout (автоскроллинг).

З.Ы. Возможно это вопрос к след. теме. Уроки еще не все прочел, но подходящей темы не нашел.

xolostyak_by
Сообщения: 18
Зарегистрирован: 02 июл 2012, 03:16

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение xolostyak_by » 04 июл 2012, 00:11

Подскажите пожалуйста. почему по умолчанию корневым создается Relative Layout а не LinearLayout. И почему файл назыается не main.xml а activiti_main
Изображение

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение damager82 » 05 июл 2012, 13:50

xolostyak_by писал(а):Подскажите пожалуйста. почему по умолчанию корневым создается Relative Layout а не LinearLayout. И почему файл назыается не main.xml а activiti_main
Возможно, так происходит в новой версии ADT-плагина.
Кто-нить обновляется регулярно? Есть такое в последних версиях?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение AndreyI » 05 июл 2012, 14:22

Да, стартовый макет немного изменили. Новая разметка теперь создается с Relative Layout . В ресурсах для каждого Activity создается макет меню. Соответственно в Activity помимо onCreate добавили
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

Также можно создать значки всех типов для приложения (раньше это можно было сделать через Android Asset Studio , теперь его прикрутили непосредственно к мастеру). Иконки можно создавать также после создания приложения запуском мастера Android Icon Set
Вообще количество визардов стало больше.

Теперь можно добавлять Activity (и не только) в приложения , они будут автоматом добавляться в манифест.
Ну еще много чего изменили/добавили.

ЗЫ Вообще я в "новостях" создал специальную тему для обсуждения нововведений.

Namehere
Сообщения: 6
Зарегистрирован: 09 июл 2012, 07:12

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение Namehere » 09 июл 2012, 07:26

Не получается выполнить урок, так код указанный в уроке и код по ссылке http://developer.android.com/guide/topi ... ative.html вызывают ошибки. Конкретно ошибку вызывает элемент "Plain text" из "Text fields". При чем если в свойствах "Input Type" изменить на любой другой, например "textPersonName", то ошибка пропадает. Текст ошибки:
NOTE: This project contains Java compilation errors, which can cause rendering failures for custom views. Fix compilation problems first.
java.util.LinkedHashMap.eldest()Ljava/util/Map$Entry;
Из первой строчки понятно что проблема с явой, но что конкретно делать, обновлений новых не находит, да и все остальное работает без проблем. Эклипс перезапускал, систему перезагружал на результат не влияет:)

diarworld
Сообщения: 1
Зарегистрирован: 13 июл 2012, 22:33

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение diarworld » 13 июл 2012, 22:38

Поправьте урок, чтобы Eclipse не ругался, необходимо в примере с rlayout.xml добавить в части с EditText:

Код: Выделить всё

android:inputType="textNoSuggestions"
Namehere, это решит твою проблему.

Namehere
Сообщения: 6
Зарегистрирован: 09 июл 2012, 07:12

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение Namehere » 16 июл 2012, 11:35

спасибо, diarworld. Это именно косяк эклипса? Ведь по умолчанию добавляется именно такой обьект и свойства поменять невозможно, только править хмл файл.
Да и при запуске приложений несмотря на ошибки выдаваемые eclipse все работает нормально.

papka
Сообщения: 5
Зарегистрирован: 26 июл 2012, 12:28

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение papka » 26 июл 2012, 12:59

мне кажется или вы умолчали о FrameLayout?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение damager82 » 30 июл 2012, 09:37

papka писал(а):мне кажется или вы умолчали о FrameLayout?
Умолчал. Но уже в следующем уроке я в этом каюсь )
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

sotnik
Сообщения: 12
Зарегистрирован: 11 сен 2012, 10:37

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение sotnik » 09 окт 2012, 10:28

Кнопка в низу экрана, в WebView если текста много то кнопка остается постоянно внизу а текст прокручивается за кнопкой. Как сделать чтобы кнопка находилась всегда ниже текста какой длины бы он не был, и появлялась когда прокручиваешь весь текст до конца?

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />
    <Button
        android:id="@+id/btnAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/webView"
        android:layout_centerHorizontal="true"
        android:gravity="center_vertical|center_horizontal"
        android:text="@string/btnAdd" />

</RelativeLayout>

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение Digetix » 04 ноя 2012, 23:26

Доброго времени суток. А как сделать чтоб было два эдит текста друг под другом, а рядом с ними кнопка высотой два этих эдита?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение rezak90 » 04 ноя 2012, 23:53

Код: Выделить всё

<LinearLayout
   android:layout_height="fill_parent"
   android:layout_width="fill_parent"
   android:orientation="horiontal" >
      <LinearLayout
         android:layout_height="fill_parent"
         android:layout_width="fill_parent"
         android:layout_weight="1"
         android:orientation="vertical" >
            <EditText
               android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               <!-- на ваше усмотрение -->
               />
            <EditText
               android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               <!-- на ваше усмотрение -->
               />
            </LinearLayout>
      <LinearLayout
         android:layout_height="fill_parent"
         android:layout_width="fill_parent"
         android:layout_weight="1"
         android:orientation="vertical" >
            <Button
               android:layout_height="fill_parent"
               android:layout_width="fill_parent"
               />
            </LinearLayout>
</LinearLayout>
Не проверял, но должно работать
R.id.team
Политика на форуме запрещена

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение Digetix » 05 ноя 2012, 19:17

rezak90 писал(а): Не проверял, но должно работать
Спасибо. Работает. Но кнопка не одной высоты с эдитами. А вообще можно вручную выставить их размеры? Пытался ставить не получается

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение rezak90 » 05 ноя 2012, 19:55

что значит вручную? по-пиксельно что ли? можно конечно за месть LinearLayout использовать RelativeLayout.
R.id.team
Политика на форуме запрещена

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение Digetix » 06 ноя 2012, 12:14

rezak90 писал(а):что значит вручную? по-пиксельно что ли? можно конечно за месть LinearLayout использовать RelativeLayout.
Да, по-пиксельно. Правда могут быть проблемы с разными экранами

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение rezak90 » 06 ноя 2012, 13:22

по-пиксельно забудьте, если делаете для более чем одного разрешения экрана))) в 99,99% нет необходимости использовать такие методы, в андроиде достаточно способов/методов организовать всё красиво для всех экранов.
R.id.team
Политика на форуме запрещена

$01ny$hko
Сообщения: 44
Зарегистрирован: 18 окт 2012, 10:11

Re: Урок 6. Виды Layouts. Ключевые отличия и свойства.

Сообщение $01ny$hko » 01 дек 2012, 14:07

Подскажите,
1. как сделать чтобы кнопочки были впритык?
2. и как изменить их высоту? (мне нужно чтобы ниже были, чуть- чуть приплюснутыми)

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/btLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft="0dp"
            android:text="ххх" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft="0dp"
            android:layout_marginRight="0dp"
            android:text="уууу" />

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginRight="0dp"
            android:text="ааа" />
    </LinearLayout>
    
       <TextView
        android:id="@+id/tvView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="сссссс" >

    </TextView>
    
       
 <ScrollView
        android:id="@+id/scroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
   
    
    <LinearLayout
        android:id="@+id/linLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    </LinearLayout>
     </ScrollView>

</LinearLayout>

Ответить