Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Программная установка отступов



Для программной установки внутренних отступов у элементы вызыватся метод setPadding(left, top, right, bottom), в который передаются четыре значения для каждой из сторон.

Для установки внешних отступов необходимо реализовать объект LayoutParams для того контейнера, который применяется. И затем вызвать у этого объекта LayoutParams метод setMargins(left, top, right, bottom):

package com.example.eugene.layoutapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);    RelativeLayout relativeLayout = new RelativeLayout(this);    TextView textView1 = new TextView(this);    textView1.setBackgroundColor(0xFFBDBDBD);    textView1.setText(" Hello Android 7" );    textView1.setTextSize(26);    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams           (ViewGroup.LayoutParams.MATCH_PARENT, 200);    // установка внешних отступов   layoutParams.setMargins(30, 40, 50, 60);    // устанавливаем размеры   textView1.setLayoutParams(layoutParams);    // установка внутренних отступов   textView1.setPadding(30, 30, 30, 30);    // добавляем TextView в RelativeLayout   relativeLayout.addView(textView1);    setContentView(relativeLayout); }}

LinearLayout

Контейнер LinearLayout представляет объект ViewGroup, который упорядочивает все дочерние элементы в одном направлении: по горизонтали или по вертикали. Все элемены расположены один за другим. Направление разметки указывается с помощью атрибута android: orientation.

Если, например, ориентация разметки вертикальная (android: orientation=" vertical" ), то все элементы располагаются в столбик - по одному элементу на каждой строке. Если ориентация горизонтальная (android: orientation=" horizontal" ), то элементы располагаются в одну строку. Например, расположим элементы в горизонтальный ряд:

<? xml version=" 1.0" encoding=" utf-8"? > < LinearLayout xmlns: android=" http: //schemas.android.com/apk/res/android" android: layout_width=" match_parent" android: layout_height=" match_parent" android: orientation=" horizontal" > < TextView   android: layout_width=" wrap_content"    android: layout_height=" wrap_content"    android: text=" Hello"    android: textSize=" 26sp" /> < TextView   android: layout_width=" wrap_content"    android: layout_height=" wrap_content"    android: text=" Android"    android: textSize=" 26sp" />    < TextView   android: layout_width=" wrap_content"    android: layout_height=" wrap_content"    android: text=" Nougat"    android: textSize=" 26sp" /> < /LinearLayout>

Если бы мы указали для LinearLayout атрибут android: orientation=" vertical", то элементы размещались бы по вертикали:

LinearLayout поддерживает такое свойство, как вес элемента, которое передается атрибутом android: layout_weight. Это свойство принимает значение, указывающее, какую часть оставшегося свободного места контейнера по отношению к другим объектам займет данный элемент. Например, если один элемент у нас будет иметь для свойства android: layout_weight значение 2, а другой - значение 1, то в сумме они дадут 3, поэтому первый элемент будет занимать 2/3 оставшегося пространства, а второй - 1/3.

Если все элементы имеют значение android: layout_weight=" 1", то все эти элементы будут равномерно распределены по всей площади контейнера:

<? xml version=" 1.0" encoding=" utf-8"? > < LinearLayout xmlns: android=" http: //schemas.android.com/apk/res/android" android: layout_width=" match_parent" android: layout_height=" match_parent" android: orientation=" vertical" > < TextView   android: layout_width=" match_parent"    android: layout_height=" 0dp"    android: text=" Hello"    android: background=" #e0e0e0"    android: layout_weight=" 1"    android: textSize=" 26sp" /> < TextView   android: layout_width=" match_parent"    android: layout_height=" 0dp"    android: background=" #eeeeee"    android: text=" Android"    android: layout_weight=" 1"    android: textSize=" 26sp" /> < TextView   android: layout_width=" match_parent"    android: layout_height=" 0dp"    android: text=" Nougat"    android: background=" #bdbdbd"       android: layout_weight=" 1"    android: textSize=" 26sp" /> < /LinearLayout>

В данном случае LinearLayout имеет вертикальную ориентацию, поэтому все элементы будут располагаться сверху вниз. Все три элемента имеют значение android: layout_weight=" 1", поэтому сумма весов всех элементов будет равна 3, а каждый элемент получит по трети пространства в LinearLayout:

При этом так как у нас вертикальный стек, то нам надо также установить для свойства layout_height значение 0dp. Если бы LinearLayout имел горизонтальную ориентацию, то для свойства layout_width надо было бы установить значение 0dp.

Еще один атрибут android: weightSum позволяет указать сумму весов всех элементов. Например:

<? xml version=" 1.0" encoding=" utf-8"? > < LinearLayout xmlns: android=" http: //schemas.android.com/apk/res/android" android: layout_width=" match_parent" android: layout_height=" match_parent" android: orientation=" vertical" android: weightSum=" 7" > < TextView   android: layout_width=" match_parent"    android: layout_height=" 0dp"    android: text=" Hello"    android: background=" #e0e0e0"    android: layout_weight=" 1"    android: textSize=" 26sp" /> < TextView   android: layout_width=" match_parent"    android: layout_height=" 0dp"    android: background=" #eeeeee"    android: text=" Android"    android: layout_weight=" 3"    android: textSize=" 26sp" /> < TextView   android: layout_width=" match_parent"    android: layout_height=" 0dp"    android: text=" Nougat"    android: background=" #bdbdbd"    android: layout_weight=" 2"    android: textSize=" 26sp" /> < /LinearLayout>

LinearLayout здесь задает сумму весов равную 7. То есть все пространство по вертикали (так как вертикальная ориентация) условно делится на семь равных частей.

Первый TextView имеет вес 1, то есть из этих семи частей занимает только одну. Второй TextView имеет вес 3, то есть занимает три части из семи. И третий имеет вес 2. Итоговая сумма составляет 6. Но так как LinearLayout задает вес 7, то одна часть будет свободна от всех элементов.


Поделиться:



Последнее изменение этой страницы: 2019-05-04; Просмотров: 236; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.008 с.)
Главная | Случайная страница | Обратная связь