Android studio visibility gone

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

Разница между атрибутами видимости VISIBLE, INVISIBLE и GONE в Android

В разработке для Android большинство элементов управления имеют атрибут видимости, а есть три атрибута: «видимый», «невидимый» и «пропавший». В основном используется для настройки отображения и скрытия элементов управления. Некоторые люди могут задаться вопросом, в чем разница между невидимым и ушедшим? ? ? Итак, с этим вопросом мы смотрим на следующее:

Это устанавливается следующим образом в файле XML и коде Java:

Видимый (видимый)

XML-файл: android: visibility = «visible»

Java-код: view.setVisibility (View.VISIBLE);

Невидимый (невидимый)

XML-файл: android: visibility = «invisible»

Java-код: view.setVisibility (View.INVISIBLE);

Спрятаться

XML-файл: android: visibility = «ушел»

Java-код: view.setVisibility (View.GONE);

Чтобы различить три, я построил Купол для демонстрации, сначала перейдем к кодексу Купола, после демонстрации я знаю разницу между ними:

  1. xml version = «1.0» encoding = «utf-8» ?>
  2. LinearLayout xmlns:android = «http://schemas.android.com/apk/res/android»
  3. android:layout_width = «fill_parent»
  4. android:layout_height = «fill_parent»
  5. android:orientation = «vertical» >
  6. LinearLayout
  7. android:layout_width = «fill_parent»
  8. android:layout_height = «wrap_content»
  9. android:orientation = «horizontal»
  10. android:layout_marginBottom = «20dip» >
  11. TextView
  12. android:layout_width = «wrap_content»
  13. android:layout_height = «wrap_content»
  14. android:layout_weight = «1»
  15. android:background = «#F00»
  16. android:text = «TextView1»
  17. android:textSize = «23sp»
  18. android:visibility = «visible»/>
  19. TextView
  20. android:id = «@+id/mainTV2»
  21. android:layout_width = «wrap_content»
  22. android:layout_height = «wrap_content»
  23. android:layout_weight = «1»
  24. android:background = «#00F»
  25. android:text = «TextView2»
  26. android:textSize = «23sp»
  27. android:visibility = «visible»/>
  28. LinearLayout >
  29. Button
  30. android:id = «@+id/mainBtn1»
  31. android:layout_width = «fill_parent»
  32. android:layout_height = «wrap_content»
  33. android:text = «TextView2 ВИДИМ»
  34. android:onClick = «mianOnClickListener»/>
  35. Button
  36. android:id = «@+id/mainBtn2»
  37. android:layout_width = «fill_parent»
  38. android:layout_height = «wrap_content»
  39. android:text = «TextView2 невидим»
  40. android:onClick = «mianOnClickListener»/>
  41. Button
  42. android:id = «@+id/mainBtn3»
  43. android:layout_width = «fill_parent»
  44. android:layout_height = «wrap_content»
  45. android:text = «TextView2 ушел»
  46. android:onClick = «mianOnClickListener»/>
  47. LinearLayout >

Пока последние три кнопки являются атрибутами, которые контролируют видимость TextView

  1. package com.chindroid.visibility;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.TextView;
  6. public class MainActivity extends Activity <
  7. /** TextView2 */
  8. private TextView mainTV2 = null ;
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) <
  11. super .onCreate(savedInstanceState);
  12. setContentView(R.layout.main);
  13. // Инициализируем данные
  14. initData();
  15. >
  16. / ** Метод инициализации контроля * /
  17. private void initData() <
  18. mainTV2 = (TextView)findViewById(R.id.mainTV2);
  19. >
  20. /**
  21. Метод реагирования на событие нажатия кнопки в MainActivity
  22. *
  23. * @param v
  24. */
  25. public void mianOnClickListener(View v) <
  26. switch (v.getId()) <
  27. case R.id.mainBtn1: < // Событие ответа кнопки 1
  28. // Установить TextView2 как видимый
  29. mainTV2.setVisibility(View.VISIBLE);
  30. break ;
  31. >
  32. case R.id.mainBtn2: < // Событие ответа кнопки 2
  33. // Установить TextView2 как невидимый
  34. mainTV2.setVisibility(View.INVISIBLE);
  35. break ;
  36. >
  37. case R.id.mainBtn3: < // Ответное событие кнопки 3
  38. // Установить TextView2, чтобы скрыть
  39. mainTV2.setVisibility(View.GONE);
  40. break ;
  41. >
  42. default :
  43. break ;
  44. >
  45. >
  46. >

При запуске программы оба TextViews видны

Когда мы нажимаем первую кнопку и устанавливаем для свойства TextView2visibility значение INVISIBLE, процедура выглядит следующим образом:

Когда мы нажимаем третью кнопку и устанавливаем свойство TextView2visibility в GONE, процедура выглядит следующим образом:

Когда мы снова нажмем первую кнопку и установим свойство TextView2visibility в VISIBLE, TextView2 снова будет представлен, как показано на следующем рисунке:

VISIBLE: сделать элемент управления видимым

Невидимый: установите элемент управления невидимым

GONE: установить контроль, чтобы скрыть

Основное различие между INVISIBLE и GONE заключается в следующем: когда свойство видимости элемента управления равно INVISIBLE, интерфейс резервирует пространство, занимаемое элементом управления view, а когда свойство элемента управления равно GONE, интерфейс не сохраняет пространство, занимаемое элементом управления view.

Источник

Андроид: разница между невидимым и ушел?

в чем разница между invisible и gone для состояния видимости вида?

7 ответов:

этот вид невидим, но он по-прежнему занимает место для целей компоновки.

этот вид невидим, и он не занимает никакого места для целей компоновки.

вид.Ушел этот вид невидим, и он не занимает никакого места для цели макета.

вид.Невидимый этот вид невидим, но он по-прежнему занимает место для целей компоновки.

позволяет очистить идею с фотографии.

предположим, что у вас есть три кнопки, как показано ниже

теперь, если вы установите видимость кнопки два как невидимый ( View.INVISIBLE ), то вывод будет

и когда вы устанавливаете видимость кнопки два как ушел ( View.GONE ), то выход будет

надеюсь, что это прояснит ваши сомнения.

Читайте также:  Как соединиться с андроидом по wifi

для ListView или GridView есть еще одно отличие, когда видимость изначально установлена в

функция getView () адаптера называется

функция getView () адаптера не вызывалась, что предотвращает загрузку представлений, когда это не нужно

невидимка:
вид должен быть нарисован, и это требует времени.

ушли:
вид не должен быть нарисован.

Я хотел бы добавить к правильным и успешным ответам, что если вы инициализируете представление с видимостью как View.GONE , представление могло быть не инициализировано, и вы получите некоторые случайные ошибки.

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

поэтому перед обработкой (изменение размера, перемещение, что угодно) представление, вы должны инициализировать его как View.VISIBLE или View.INVISIBLE чтобы отобразить его (нарисовать его) на экране, а затем обработать его.

вид.Невидимый->вид невидим, но он будет занимать некоторое пространство в макете

вид.Ушел->вид не виден, и он не будет занимать никакого места в макете

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

Если вы установили Visibility=Gone, то вам нужно инициализировать компонент..как

например кнопка _mButton = новая кнопка (это);

_mButton = (Кнопка) findViewByid (R. id. mButton);

Так что это займет больше времени по сравнению с Visibility = invisible.

Источник

Android: почему setVisibility (View.GONE); Или setVisibility (View.INVISIBLE); не работает

Я хочу, чтобы мой DatePicker и кнопка были невидимыми в начале. И когда я нажимаю свою волшебную кнопку, я хочу установитьVisibility (View.Visible);

Проблема здесь в том, что когда setVisibility(View.GONE) или setVisibility(View.INVISIBLE) ничего не меняется, и компонент все еще отображается.

Я вижу немало вещей не так. Во-первых, у вас нет определенной волшебной кнопки, и для нее нет обработчика событий.

Также вы не должны использовать:

Используйте только один из двух. Из документации для Android :

View.GONE Это представление невидимо, и для макета не требуется свободного места.

View.INVISIBLE Этот вид невидим, но он по-прежнему занимает пространство для макета.

В вашем примере вы переопределяете назначение View.GONE с помощью View.INVISIBLE .

Аналогично для других виджетов:

Вы можете рассматривать это как видимость и отображение стиля CSS.

Сначала просмотрите свой код:

Здесь вы устанавливаете видимость в одно и то же поле, поэтому проблема. Я даю один образец для этой демонстрации примера

View.GONE Это представление невидимо, и для макета не требуется свободного места.

View.INVISIBLE Этот вид невидим, но он по-прежнему занимает пространство для макета.

Сегодня у меня был сценарий, где я выполнял следующие действия:

Прямо на следующем кадре я выполнял проверку в другом месте для видимости этого представления. И угадай что? Проходило следующее условие:

Помещая точки останова, вы видите, что видимость меняется на GONE , но прямо на следующем кадре она волшебным образом становится VISIBLE . Я пытался понять, как, черт возьми, это может случиться.

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

Если вы отлаживаете, вы увидите, что myViewGroup действительно меняет видимость на GONE , но прямо на следующем кадре он снова станет видимым для запуска анимации.

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

Вы можете удалить все анимации в представлении через View.clearAnimation () .

Потому что вы устанавливаете видимость как true, так и false. Попробуйте setVisible(0) для видимого true. and setVisible(4) до видимого false.

Источник

Android studio visibility gone

Войти

Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal

Layouts (разметка)

Любая Activity (деятельность, окно приложения) состоит из Views и ViewGroups. View — виджет, который рисуется на экране, например, кнопка, текстовое поле, список. Все такие виджеты наследуются от класса android.view.View.
ViewGroup — разметка, позволяющая расположить один или несколько View. Разметки наследуются от класса android.view.ViewGroup, который в свою очередь наследуется от android.view.View. Это значит что дочерними элементами разметки могут быть не только View, но и сами разметки

Читайте также:  Как удалить фотострану с андроида

Примеры ViewGroups:
— FrameLayout
— LinearLayout
— TableLayout
— RelativeLayout
— ScrollView

Рассмотрим их более подробно.

FrameLayout

FrameLayout — разметка для отображения одного элемента. Дочерние View или ViewGroup в FrameLayout выравниваются по верхнему левому углу. Разметка может содержать несколько элементов, но тогда они будут перекрывать друг друга. Например:

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent» >
  3. android:layout_width = «wrap_content»
  4. android:layout_height = «wrap_content»
  5. android:text = «@string/Button»
  6. />
  7. >
  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent» >
  3. android:layout_width = «wrap_content»
  4. android:layout_height = «wrap_content»
  5. android:src = «@drawable/image»
  6. />
  7. android:layout_width = «wrap_content»
  8. android:layout_height = «wrap_content»
  9. android:text = «@string/Button»
  10. />
  11. >

FrameLayout удобно использовать для нескольких элементов, которые скрываются и показываются программно, таким образом что в каждый момент времени видимым оказывается только один из них. Для управления видимостью элемента используется атрибут android:visibility в xml или метод setVisibility (int visibility), где visibility принимает одно из трех значений:
VISIBLE — элемент видим
INVISIBLE — элемент невидим, но все еще занимает место в разметке
GONE — элемент невидим и не занимает место в разметке

LinearLayout

Разметка для отображения одного или нескольких элементов в одну линию, горизонтально или вертикально. Для выбора ориентации используется атрибут android:orientation с двумя возможными значениями «horizontal» и «vertical»

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent»
  3. android:orientation = «vertical»
  4. >
  5. android:layout_width = «wrap_content»
  6. android:layout_height = «wrap_content»
  7. android:text = «@string/Button»
  8. />
  9. android:layout_width = «wrap_content»
  10. android:layout_height = «wrap_content»
  11. android:text = «@string/Button»
  12. />
  13. android:layout_width = «wrap_content»
  14. android:layout_height = «wrap_content»
  15. android:text = «@string/Button»
  16. /> >
  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent»
  3. android:orientation = «horizontal»
  4. >
  5. android:layout_width = «wrap_content»
  6. android:layout_height = «wrap_content»
  7. android:text = «@string/Button»
  8. />
  9. android:layout_width = «wrap_content»
  10. android:layout_height = «wrap_content»
  11. android:text = «@string/Button»
  12. />
  13. android:layout_width = «wrap_content»
  14. android:layout_height = «wrap_content»
  15. android:text = «@string/Button»
  16. /> >

TableLayout

Разметка для расположения элементов в виде таблицы. Ряды задаются в xml с помощью тега TableRow, а ячейки в каждом ряду создаются автоматически для каждого элемента. Количество колонок в таблице будет равно максимальному количеству элементов в рядах. То есть если в одном ряду 3 элемента, а во втором 1, то колонок в TableLayout будет 3. Ширина колонки определяется по самому широкому элементу в ней. Ячейки таблицы можно оставлять пустыми, или объединять. Атрибут android:layout_column — задает в какой столбец поместить данный элемент (нумерация столбцов начинается с 0). Атрибут android:layout_span — позволяет объединить указанное количество столбцов (ряды объединить нельзя)

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent»
  3. >
  4. android:layout_width = «wrap_content»
  5. android:layout_height = «wrap_content»
  6. android:src = «@drawable/image»
  7. android:layout_column = «1»
  8. /> >
  9. android:layout_width = «wrap_content»
  10. android:layout_height = «wrap_content»
  11. android:text = «@string/Button»
  12. />
  13. android:layout_width = «wrap_content»
  14. android:layout_height = «wrap_content»
  15. android:text = «@string/Button»
  16. /> >
  17. android:layout_width = «wrap_content»
  18. android:layout_height = «wrap_content»
  19. android:text = «@string/Button»
  20. android:layout_span = «2»
  21. /> > >

RelativeLayout

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

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent» >
  3. android:id = «@+id/image»
  4. android:layout_width = «wrap_content»
  5. android:layout_height = «wrap_content»
  6. android:src = «@drawable/image»
  7. android:layout_centerHorizontal = «true»
  8. />
  9. android:layout_width = «wrap_content»
  10. android:layout_height = «wrap_content»
  11. android:layout_toLeftOf = «@id/image»
  12. android:text = «@string/Left»
  13. />
  14. android:layout_width = «wrap_content»
  15. android:layout_height = «wrap_content»
  16. android:layout_toRightOf = «@id/image»
  17. android:text = «@string/Right»
  18. />
  19. >

Возможные атрибуты элементов:
Расположение относительно родительского элемента. Значением атрибута является «true»
android:layout_alignParentTop — верхняя граница элемента располагается на верхней границе RelativeLayout
android:layout_alignParentLeft — левая граница элемента располагается на левой границе RelativeLayout
android:layout_alignParentRight — правая граница элемента располагается на правой границе RelativeLayout
android:layout_alignParentBottom — нижняя граница элемента располагается на нижней границе RelativeLayout
android:layout_centerInParent — элемент располагается в центре родительского по горизонтали и вертикали
android:layout_centerHorizontal — элемент располагается в центре родительского по горизонтали
android:layout_centerVertical — элемент располагается в центре родительского по вертикали

Расположение относительно других элементов, значением атрибута является id другого элемента.
android:layout_above — элемент располагается сверху от другого элемента
android:layout_toLeftOf — элемент располагается слева от другого элемента
android:layout_toRightOf — элемент располагается справа от другого элемента.
android:layout_below — элемент располагается снизу от другого элемента.
android:layout_alignBaseline — базовая линия элемента выравнивается по базовой линии другого элемента
android:layout_alignTop — верхняя граница элемента выравнивается по верхней границе другого элемента
android:layout_alignLeft — левая граница элемента выравнивается по левой границе другого элемента
android:layout_alignRight — правая граница элемента выравнивается по правой границе другого элемента
android:layout_alignBottom — нижняя граница элемента выравнивается по нижней границе другого элемента

ScrollView

ScrollView является наследником класса FrameLayout. Отличием является то, что он позволяет прокручивать элементы, если они занимают больше места чем физический размер экрана. В ScrollView также может содержаться только один элемент (View или ViewGroup), чаще всего используется LinearLayout, в которого вложено несколько элементов. Scrollview поддерживает только вертикальную прокрутку.

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent» >
  3. android:layout_width = «fill_parent»
  4. android:layout_height = «wrap_content»
  5. android:orientation = «vertical» > >
  6. >

Мы рассмотрели основные виды разметок в android. Комбинируя и вкладывая их друг в друга можно создать интерфейс любой сложности.

Атрибуты элементов

Во всех View которые вкладываются в ViewGroup есть атрибуты позволяющие управлять их размерами или расположением. Основные из них:

android:layout_width и android:layout_height

Ширина и высота элемента. Атрибут может принимать следующие значения:
fill_parent — элемент имеет размер такой же как и родительский элемент
wrap_content — элемент имеет размер по своему содержимому
точное значение размера. Размер может указываться в следующих единицах:
dp — (Density-independent Pixels) — абстрактная единица, основанная на плотности экрана. На устройствах с экраном 160dpi: 1dp=1px. Это соотношение будет меняться на экранах с другой плотностью, причем необязательно в прямой пропорции. Таким образом обеспечивается согласованность размеров элементов интерфейса на различных устройствах.

sp — (Scale-independent Pixels) — единица измерения похожая на dp, однако она также масштабируется учитывая пользовательские настройки шрифта.

px — пиксели. Не рекомендуется использовать эту единицу измерения, так как представление элемента может различаться в зависимости от устройства. Так если мы задаем ширину элемента 100px, то на устройствах с экраном 320×240 это будет почти полэкрана, а на устройствах 800×480 — меньше четверти экрана.

pt — (points) 1/72 дюйма

Последние три единицы измерения не зависят от разрешения и диагонали экрана.
1in = 25.4mm = 72pt

На скриншоте показано как выглядят кнопки на разных размерах экрана

android:layout_gravity

Атрибут определяющий как данный View позиционируется внутри родительского элемента. Основные значения: top, bottom, left, right, center. Значение у элемента может быть одно или несколько (тогда они разделяются «|»).
Важно не путать android:layout_gravity и android:gravity. android:gravity — определяет позиционирование внутри самого элемента, а android:layout_gravity — позиционирование элемента внутри родительского.

android:layout_margin

А также android:layout_marginLeft, android:layout_marginRight, android:layout_marginTop, android:layout_marginBottom. Атрибут определяет отступ элемента от соседних элементов (или от границы родительского)

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent»
  3. android:orientation = «vertical» >
  4. android:layout_width = «wrap_content»
  5. android:layout_height = «wrap_content»
  6. android:text = «without margin»
  7. />
  8. android:layout_width = «wrap_content»
  9. android:layout_height = «wrap_content»
  10. android:text = «marginLeft=30dp»
  11. android:layout_marginLeft = «30dp»
  12. />
  13. android:layout_width = «wrap_content»
  14. android:layout_height = «wrap_content»
  15. android:text = «marginTop=30dp»
  16. android:layout_marginTop = «30dp»
  17. /> >

Для отступа внутри элемента используются атрибуты
android:padding, android:paddingLeft, android:paddingRight, android:paddingTop, android:paddingBottom

android:weight

Атрибут определяет соотношение в котором будет распределятся пространство для элементов разметки.

  1. android:layout_width = «fill_parent»
  2. android:layout_height = «fill_parent»
  3. android:orientation = «horizontal» >
  4. android:layout_width = «wrap_content»
  5. android:layout_height = «wrap_content»
  6. android:text = «weight=1»
  7. android:layout_weight = «1»
  8. />
  9. android:layout_width = «wrap_content»
  10. android:layout_height = «wrap_content»
  11. android:text = «weight=2»
  12. android:layout_weight = «2»
  13. /> >

У первой кнопки weight=1, у второй weight=2, таким образом ширина первой 1/3 экрана, а второй 2/3 экрана. На скриншоте это соотношение может быть неочевидным, так как при отрисовки элементов учитывается их ширина (в нашем случае wrap_content). Если поставить ширину обеим кнопкам android:layout_width=»0dp», то вторая кнопка будет ровно в два раза длиннее первой. Если мы хотим чтобы длина кнопок была одинаковой, необходимо поставить им одинаковый вес (причем неважно какой).

Если атрибут layout_weight поставить только у одного элемента, то он займет максимум свободного пространства. Так на первом скриншоте у трех кнопок android:layout_width=»wrap_content» и не задан weight. На втором скриншоте у второй кнопки задан android:layout_weight=»1″

Источник

Читайте также:  Линейдж для андроид дата выхода
Оцените статью