Android studio textview setlayoutparams

Полный список

В этом уроке мы:

— рисуем экран программно, а не через layout-файл

До этого мы создавали экран с помощью layout-файлов. Но то же самое мы можем делать и программно.

Project name: P0161_DynamicLayout
Build Target: Android 2.3.3
Application name: DynamicLayout
Package name: ru.startandroid.develop.dinamiclayout
Create Activity: MainActivity

Открываем MainActivity.java и обратим внимание на строку:

Напомню, что в этой строке мы указываем, что Activity в качестве экрана будет использовать layout-файл main.xml. Есть другая реализация этого метода, которая на вход принимает не layout-файл, а View-элемент и делает его корневым. В layout-файлах корневой элемент обычно LinearLayout, мы тоже используем его.

Обновим импорт – CTRL+SHIFT+O. Eclipse предложит нам выбрать, какой именно LayoutParams мы будем использовать. Тут надо остановиться подробнее. Вспомним теорию про экраны. Экран состоит из ViewGroup и вложенных в них View.

Известные нам примеры ViewGroup – это LinearLayout, TableLayout, RelativeLayout и т.д. Каждая из этих ViewGroup имеет вложенный класс LayoutParams. Базовым для этих LayoutParams является ViewGroup.LayoutParams.

ViewGroup.LayoutParams имеет всего два атрибута: height и width. Его подкласс ViewGroup.MarginLayoutParams наследует два этих атрибута и имеет свои четыре: bottomMargin, leftMargin, rightMargin, topMargin. Класс LinearLayout.LayoutParams в свою очередь является подклассом ViewGroup.MarginLayoutParams, наследует от него уже 6 аттрибутов и добавляет свои два: gravity и weight.

Т.е. объект LinearLayout имеет вложенный класс LinearLayout.LayoutParams с layout-аттрибутами. И эти аттрибуты распространяются на все дочерние View и ViewGroup.

Т.е. View, находящаяся в LinearLayout имеет один набор layout-параметров:

а View из RelativeLayout – другой:

Есть и общие элементы, т.к. родители у этих ViewGroup одни.

Вернемся в Eclipse, он ждет нашего выбора. Используем базовый класс ViewGroup.LayoutParams

Давайте разберем код. Мы создаем LinearLayout и ставим вертикальную ориентацию. Далее создаем LayoutParams. Конструктор на вход принимает два параметра: width и height. Мы оба ставим MATCH_PARENT. Далее вызывается метод setContentView. На вход ему подается LinearLayout и LayoutParams. Это означает, что корневым элементом Activity будет LinearLayout с layout-свойствами из LayoutParams.

Если мы сейчас запустим приложение, то ничего не увидим, т.к. LinearLayout – прозрачен. Давайте добавлять в LinearLayout View-компоненты.

Мы снова создаем объект LayoutParams с атрибутами width = wrap_content и height = wrap_content. Теперь если мы присвоим этот объект какому-либо View, то это View будет иметь ширину и высоту по содержимому.

Далее мы создаем TextView, настраиваем его текст, присваиваем ему выше созданный LayoutParams и добавляем в LinearLayout с помощью метода addView (View child).

С Button аналогично – создаем, правим текст, а затем используем другую реализацию метода addView (View child, ViewGroup.LayoutParams params), которая одновременно добавляет Button в LinearLayout и присваивает для Button указанный LayoutParams. Результат будет тот же, что и с TextView, но вместо двух строк кода получилась одна.

Читайте также:  Заблокировала как сброс всех настроек андроида

Обратите внимание, что для двух объектов View я использовал один объект LayoutParams — lpView. Оба View-объекта считают параметры из LayoutParams и используют их.

Сохраним и запустим приложение. Видим, что компоненты на экране появились. И видно, что их высота и ширина определена по содержимому (wrap_content).

Объект lpView имеет базовый тип android.view.ViewGroup.LayoutParams. А значит позволит настроить только ширину и высоту. Но для View в LinearLayout доступны, например, отступ слева или выравнивание по правому краю. И если мы хотим их задействовать, значит надо использовать LinearLayout.LayoutParams:

Смотрим код. Мы создаем объект типа LinearLayout.LayoutParams с помощью такого же конструктора, как и для обычного LayoutParams, указывая width и height. Затем мы указываем отступ слева = 50. Отступ здесь указывается в пикселах. Далее схема та же: создаем объект, настраиваем текст и добавляем его в LinearLayout c присвоением LayoutParams.

Аналогично добавим компонент с выравниванием:

Сохраним и запустим. Button1 имеет отступ 50px. А Button2 выравнена по правому краю:

Вероятно, эта тема будет не очень понятна с первого раза. Поэтому на следующих двух уроках мы закрепим эти знания и попрактикуемся в добавлении элементов на экран и их настройке.

Полный код урока:

На следующем уроке:

— добавляем компоненты на экран во время работы приложения

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Русские Блоги

Подробное объяснение класса LayoutParams в Android

1. Предварительный базовый запас знаний

Сначала рассмотрим несколько примеров использования LayoutParams:

1. В главе 8 книги «Изучение искусства разработки для Android» параметры положения кнопки x, y и информация о положении Gravity устанавливаются с помощью параметра LayoutParams, когда кнопка динамически устанавливается в коде Java, тем самым динамически добавляя кнопку, которая перемещается с помощью жеста, как плавающее окно. эффект.

2. В главе 3 «Android Development Art Exploration» реализуйте перемещение элемента управления, задав параметры LayoutParams.

3. Статьи перед автором«Горизонтальный слайд-вид с уточненным подробным объяснением HorizontalScrollView» Вот следующий код для динамического добавления TextView в HorizontalScrollView для заполнения данных.

4. В реальной разработке, когда автор переписывает onMeasure () и изменяет макет представления при встрече с настраиваемым представлением, положение представления должно быть соответствующим образом скорректировано, поэтому я написал метод, которым управляет LayoutParams.Gravity = Gravity.CENTER Положение обзора по центру.

Читайте также:  Android studio edittext placeholder

Приведенные выше примеры реализованы с использованием класса LayoutParams.Добавить новый видилиРегулировка существующего положения обзора, Давайте посмотрим на описание этого класса в официальной документации. Откройте документацию разработчика Android, и когда вы введете LayoutParams, вы найдете множество классов, связанных с LayoutParams. В этой статье мы сосредоточимся только на классе LayoutParams в ViewGroup.LayoutParams.

общедоступный статический класс ViewGroup.LayoutParamsextends Object. Вы можете видеть ViewGroup.LayoutParams Это статический класс, непосредственно унаследованный от Object, поэтому его можно рассматривать как базовый класс. Глядя на документ, мы видим:

Разумеется, все классы LayoutParams унаследованы от ViewGroup.LayoutParams. Фактически, ViewGroup.LayoutParams хорошо изучен, переменные-члены в этом классе в основном включают два:ширина и высота, Соответствует android: layout_height и android: layout_width в макете XML, которые являются двумя атрибутами, которые должны записывать все элементы управления View. Затем автор отметил на снимке экрана четыре конкретных подкласса LayoutParams, эти четыре класса наиболее часто используются в разработке.

2. В коде используйте конкретно класс LayoutParams.

(1)Используйте класс LayoutParams для динамического создания новых элементов макета

① Определите макет XML, корневой макет является линейным, и в макете не помещаются элементы управления;

② Динамически добавлять TextView ко всему макету в коде действия, требуя, чтобы его свойства были установлены;

Здесь мы берем экземпляр LayoutParams LinearLayout в качестве примера для его создания.

(2)Используйте класс LayoutParams для динамического изменения информации о положении существующих элементов макета.

① Определите макет XML, корневой макет является линейным макетом, а в макет добавляется базовый текстовый элемент управления;

②Используйте класс LayoutParams в Activity для динамического изменения информации о положении основного текстового элемента управления;

Как видите, метод использования LayoutParams здесь тот же, за исключением того, что параметры, передаваемые методу конструктора, отличаются при создании экземпляра LayoutParams. В соответствии с предпосылкой существующих элементов управления мы передаем информацию LayoutParams существующего пространства.

Источник

Основы создания интерфейса

Введение в создание интерфейса

Графический интерфейс пользователя представляет собой иерархию объектов android.view.View и android.view.ViewGroup . Каждый объект ViewGroup представляет контейнер, который содержит и упорядочивает дочерние объекты View . В частности, к контейнерам относят такие элементы, как RelativeLayout, LinearLayout, GridLayout, ConstraintLayout и ряд других.

Простые объекты View представляют собой элементы управления и прочие виджеты, например, кнопки, текстовые поля и т.д., через которые пользователь взаимодействует с программой:

Большинство визуальных элементов, наследующихся от класса View, такие как кнопки, текстовые поля и другие, располагаются в пакете android.widget

При определении визуального у нас есть три стратегии:

Создать элементы управления программно в коде java

Объявить элементы интерфейса в XML

Сочетание обоих способов — базовые элементы разметки определить в XML, а остальные добавлять во время выполнения

Сначала рассмотрим первую стратегию — определение интерейса в коде Java.

Создание интерфейса в коде java

Для работы с визуальными элементами создадим новый проект. В качестве шаблона проекта выберем Empty Activity :

Читайте также:  Mgq paradox для андроид

Пусть он будет называться ViewsApp:

И после создания проекта два основных файла, которые будут нас интересовать при создании визуального интерфейса — это класс MainActivity и определение интерфейса для этой activity в файле activity_main.xml .

Определим в классе MainActivity простейший интерфейс:

При создании виджетов в коде Java применяется их конструктор, в который передается контекст данного виджета, а точнее объект android.content.Context , в качестве которого выступает текущий класс MainActivity.

Здесь весь интерфейс представлен элементом TextView, которое предназначено для выводa текста. С помощью методов, которые, как правило, начинаются на set , можно установить различные свойства TextView. Например, в данном случае метод setText() устанавливает текст в поле, а setTextSize() задает высоту шрифта.

Для установки элемента в качестве интерфейса приложения в коде Activity вызывается метод setContentView() , в который передается визуальный элемент.

Если мы запустим приложение, то получим следующий визуальный интерфейс:

Подобным образом мы можем создавать более сложные интерейсы. Например, TextView, вложенный в ConstraintLayout:

Для каждого контейнера конкретные действия по добавлению и позиционированию в нем элемента могут отличаться. В данном случае контейнеров выступает класс ConstraintLayout, поэтому для определения позиционирования и размеров элемента необходимо создать объект ConstraintLayout.LayoutParams . (Для LinearLayout это соответственно будет LinearLayout.LayoutParams, а для RelativeLayout — RelativeLayout.LayoutParams и т.д.). Этот объект инициализируется двумя параметрами: шириной и высотой. Для указания ширины и высоты можно использовать константу ViewGroup.LayoutParams.WRAP_CONTENT , которая устанавливает размеры элемента, необходимые для размещения а экране его содержимого.

Далее определяется позиционирование. В зависимости от типа контейнера набор устанавливаемых свойств может отличаться. Так, строка кода

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

указывает, что верхняя граница элемента будет выравниваться по верхней ганице контейнера. В итоге элемент будет размещен в левом верхнем углу ConstraintLayout.

Для установки всех этих значений для конкретного элемента (TextView) в его метод setLayoutParams() передается объект ViewGroup.LayoutParams (или один из его наследников, например, ConstraintLayout.LayoutParams).

Все классы контейнеров, которые наследуются от android.view.ViewGroup (RelativeLayout, LinearLayout, GridLayout, ConstraintLayout и т.д.), имеют метод void addView(android.view.View child) , который позволяет добавить в контейнер другой элемент — обычный виджет типа TextView или другой контейнер. И в данном случае посредством данного метода TextView добавляется в ConstraintLayout:

Опять же отмечу, что для конкретного контейнера конкретные действия могут отличаться, но как правило для всех характерно три этапа:

Создание объекта ViewGroup.LayoutParams и установка его свойств

Передача объекта ViewGroup.LayoutParams в метод setLayoutParams() элемента

Передача элемента для добавления в метод addView() объекта контейнера

Хотя мы можем использовать подобный подход, в то же время более оптимально определять визуальный интерейс в файлах xml, а всю связанную логику определять в классе activity. Тем самым мы достигнем разграничения интерфейса и логики приложения, их легче будет разрабатывать и впоследствии модифицировать. И в следующей теме мы это рассмотрим.

Источник

Оцените статью