Русские Блоги
Разница между атрибутами видимости 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);
Чтобы различить три, я построил Купол для демонстрации, сначала перейдем к кодексу Купола, после демонстрации я знаю разницу между ними:
- 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:layout_width = «fill_parent»
- android:layout_height = «wrap_content»
- android:orientation = «horizontal»
- android:layout_marginBottom = «20dip» >
- TextView
- android:layout_width = «wrap_content»
- android:layout_height = «wrap_content»
- android:layout_weight = «1»
- android:background = «#F00»
- android:text = «TextView1»
- android:textSize = «23sp»
- android:visibility = «visible»/>
- TextView
- android:id = «@+id/mainTV2»
- android:layout_width = «wrap_content»
- android:layout_height = «wrap_content»
- android:layout_weight = «1»
- android:background = «#00F»
- android:text = «TextView2»
- android:textSize = «23sp»
- android:visibility = «visible»/>
- LinearLayout >
- Button
- android:id = «@+id/mainBtn1»
- android:layout_width = «fill_parent»
- android:layout_height = «wrap_content»
- android:text = «TextView2 ВИДИМ»
- android:onClick = «mianOnClickListener»/>
- Button
- android:id = «@+id/mainBtn2»
- android:layout_width = «fill_parent»
- android:layout_height = «wrap_content»
- android:text = «TextView2 невидим»
- android:onClick = «mianOnClickListener»/>
- Button
- android:id = «@+id/mainBtn3»
- android:layout_width = «fill_parent»
- android:layout_height = «wrap_content»
- android:text = «TextView2 ушел»
- android:onClick = «mianOnClickListener»/>
- LinearLayout >
Пока последние три кнопки являются атрибутами, которые контролируют видимость TextView
- package com.chindroid.visibility;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.TextView;
- public class MainActivity extends Activity <
- /** TextView2 */
- private TextView mainTV2 = null ;
- @Override
- public void onCreate(Bundle savedInstanceState) <
- super .onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // Инициализируем данные
- initData();
- >
- / ** Метод инициализации контроля * /
- private void initData() <
- mainTV2 = (TextView)findViewById(R.id.mainTV2);
- >
- /**
- Метод реагирования на событие нажатия кнопки в MainActivity
- *
- * @param v
- */
- public void mianOnClickListener(View v) <
- switch (v.getId()) <
- case R.id.mainBtn1: < // Событие ответа кнопки 1
- // Установить TextView2 как видимый
- mainTV2.setVisibility(View.VISIBLE);
- break ;
- >
- case R.id.mainBtn2: < // Событие ответа кнопки 2
- // Установить TextView2 как невидимый
- mainTV2.setVisibility(View.INVISIBLE);
- break ;
- >
- case R.id.mainBtn3: < // Ответное событие кнопки 3
- // Установить TextView2, чтобы скрыть
- mainTV2.setVisibility(View.GONE);
- break ;
- >
- default :
- break ;
- >
- >
- >
При запуске программы оба TextViews видны
Когда мы нажимаем первую кнопку и устанавливаем для свойства TextView2visibility значение INVISIBLE, процедура выглядит следующим образом:
Когда мы нажимаем третью кнопку и устанавливаем свойство TextView2visibility в GONE, процедура выглядит следующим образом:
Когда мы снова нажмем первую кнопку и установим свойство TextView2visibility в VISIBLE, TextView2 снова будет представлен, как показано на следующем рисунке:
VISIBLE: сделать элемент управления видимым
Невидимый: установите элемент управления невидимым
GONE: установить контроль, чтобы скрыть
Основное различие между INVISIBLE и GONE заключается в следующем: когда свойство видимости элемента управления равно INVISIBLE, интерфейс резервирует пространство, занимаемое элементом управления view, а когда свойство элемента управления равно GONE, интерфейс не сохраняет пространство, занимаемое элементом управления view.
Источник
Сделать кнопку невидимой после нажатия
После нажатия на кнопку она исчезает
Здравствуйте! Я никак не могу сделать так, чтобы при нажатии на кнопку она уменьшалась в.
Крашится программа после нажатия на кнопку
Когда нажимаю на клавишу button2 крашится программа в чем проблема? public class Main3Activity.
Метод вызывается только после второго нажатия на кнопку
есть метод import com.github.nkzawa.emitter.Emitter; import.
После нажатия на кнопку TBitBtn сделать кнопку не действующей
Как после нажатия на кнопку bitbtn1 кнопка становилась не действушей
Теперь вроде все норм, кроме. еще одной ошибки: Session ‘app’: Error Installing APK
Добавлено через 8 минут
Хотя все никак не смогу задушить жабу (Unfortunately, //название программы// has stopped.)
Текущий код:
(Main_Activity.java)
Сделать кнопку недоступной после нажатия на определённое время
Товарищи, как сделать чтобы после нажатии кнопки она стала недоступной в течении, например, 10.
Как сделать элементы неактивными после нажатия на кнопку
Добрый день. Необходимо составить программу тест по истории. Проблема в том, что после нажатия на.
Сделать кнопку невидимой
Добрый вечер. В Qt совсем недавно, занимаюсь переделкой одной программки и возникла такая проблема.
Как сделать кнопку невидимой
Сделал БитБтн невидимым visible=false и сверху с помощью Timage поставил картинку, нужно чтобы.
Сделать невидимой кнопку меню
чтобы при запуске программы кнопка была невидимой, а не после нажатия.
Сделать невидимой кнопку меню
Как сделать чтобы в зависимости от авторизовавшегося пользователя становились видимыми и невидимыми.
Источник
Как я могу удалить кнопку или сделать ее невидимой в Android?
Как удалить кнопку на Android или сделать ее невидимой?
Установите видимость кнопки на GONE (кнопка будет полностью «удалена» – пространство кнопок будет доступно для других виджетов) или INVISIBLE (кнопка станет «прозрачной» – ее пространство не будет доступно для других виджетов):
Сначала сделайте кнопку невидимой в xml-файле. Затем установите кнопку, видимую в java-коде, если это необходимо.
Чтобы удалить кнопку в java-коде :
Для прозрачной кнопки в java-коде :
Чтобы удалить кнопку в файле Xml :
К прозрачной кнопке в файле Xml :
Это представление невидимо, и оно не требует места для компоновки.
Но если вы просто хотите сделать его невидимым:
Использовать setVisibility в кнопке или изображенииViwe или …..
Чтобы удалить кнопку в java-коде:
К прозрачной кнопке в java-коде
Вы должны сделать вам xml-код кнопки, как показано ниже:
скрытых:
Видимость: нет
показать:
Видимость: невидимая
Видимость: видимая
Делает это видимым, если невидимым и невидимым, если видимо
Чтобы полностью удалить кнопку из родительского макета:
Элементы управления просмотром (TextView, EditText, Button, Image и т. Д.) Имеют свойство видимости. Это может быть установлено в одно из трех значений:
Видимый – отображается
Невидимый – скрытый, но зарезервированный
Gone – Скрыто полностью
Чтобы установить видимость в коде, используйте общедоступную константу, доступную в статическом классе View:
Источник
Как скрыть элемент в listview в Android
Я знаю, этот вопрос задавался раньше, но я не видел рабочего ответа на него.
есть ли способ скрыть некоторые элементы в ListView без изменения исходных данных?
Я попытался установить видимость представления элемента в gone, он больше не будет отображаться, но место, зарезервированное для этого элемента, все еще существует.
10 ответов
вы можете либо написать свой собственный ListAdapter или подкласс одного из существующих.
в своем ListAdapter , вы просто отфильтруете элементы, которые вы не хотите отображать, возвращая измененные значения для getCount() , getItem() и getItemId() по мере необходимости.
Я пробовал несколько решений, в том числе setVisibitlity(View.GONE) и раздувание по умолчанию null view но все они имеют общую проблему, и это разделители между скрытыми элементами сложены и делают плохое видимое серое пространство в больших списках.
если ListView стоит CursorAdapter тогда лучшее решение-обернуть его CursorWrapper .
Итак, мое решение (на основе ответа @ RomanUsachev здесь) является это:
FilterCursorWrapper
когда Cursor готово, кормить FilterCursorWrapper с желаемым индексом столбца
и если вы делаете фильтрацию и сортировку, не забудьте использовать FilterCursorWrapper везде:
и для обновления списка достаточно запросить с пустым фильтром:
и вы сделали, просто изменив логику isHidden метод, вы контролируете, чтобы показать или скрыть скрытые элементы. И преимущество в том, что вы не видите нежелательных разделителей. 🙂
Если вы хотите скрыть пункт такой:
не может быть AbsListView.LayoutParams (-1,0);
Если convertview повторно используется, Вы должны добавить это ниже, чтобы установить его высоту назад:
в некоторых случаях у вас есть простое решение :
Я должен скрыть представление в виде списка, потому что элементы для заполнения являются недействительными, поэтому я не хочу видеть вид :
в моем адаптере список :
у меня есть CursorAdapter Это не может быть изменено с помощью резервного массива, потому что проверка того, должен ли элемент отображаться или нет, была после получения результата из базы данных. Я реализовал решение в bindView(View v, Context context, Cursor c) в аналогичном методе, как было описано в других сообщениях. Я думаю что лучший способ переопределения bindView() метод, а потом getView(int position, View convertView, ViewGroup parent) потому что вы должны нести около null-ckecking для convertView в getView().
второе: Я пытался скрыть View v in bindView(View v, Context context, Cursor c) и это не сработало. После расследования я понял, что мне нужно спрятаться каждый элемент в вид (включая макеты, содержащие текст, изображения и т. д.)
рубить будет установить высоту элемента списка нужно скрыто 0.
но, как говорит серетур, правильный подход-удалить элемент и использовать notifyDataSetChanged() . Почему это решение не подходит в вашем случае?
Если вы создаете свой собственный adapter вы можете сделать это public View getView(int position, View convertView, ViewGroup parent) метод. Это может быть полезно в случае, если вы планируете, чтобы показать невидимые элементы в какой-то момент. Например:
надеюсь, это поможет
простой способ решить эту проблему для меня, просто проанализируйте и проверьте свой список в действии перед вызовом метода «setAdapter», например:
Источник
Как скрыть элементы RecyclerView
Я хочу скрыть некоторые элементы RecyclerView, как показано на рисунке. При нажатии кнопки «Просмотреть все» макет должен раскрыться, а остальные элементы должны быть видны.
Всего в RecyclerView 12 элементов. Один ряд должен быть скрыт.
Я пытался сделать элементы невидимыми в начале и установить их видимыми при нажатии view all путем вызова метода.
В адаптере я пробовал это
Но я не могу создать экземпляр ViewHolder в методе view all . А также создаются пустые места, где элементы невидимы. Любые другие методы, которые вы считаете лучше?
3 ответа
Добавьте переменную int maxCount = 8 и измените код на этот:
И измените maxCount на Просмотреть все .
AFAIK на Android, вы не можете скрыть / показать элементы в recycleView (оптимизированным способом) без изменения списка источников элементов. (я имею в виду динамическое удаление / добавление элементов в определенной позиции, начале, середине или конце списка)
Тем не менее, изменение источника данных и обновление списка с таким небольшим количеством элементов довольно легко и может быть сделано с помощью простого notifyDataSetChanged
В Activity/Fragment создайте экземпляр вашего списка с помощью переменной class-scoped . Я пишу пример в Activity , так как я не знаю, используете ли вы Activity или Fragment . Обь это будет то же самое с fragment .
Затем, когда вы захотите изменить элементы списка, просто обновите свой ArrayList ( или список или любой другой ) и сообщите адаптеру, что что-то изменилось.
Примечание: вам не нужно копировать список в адаптере, используйте то же самое, что и вы, т.е.
Обратите внимание, я написал это вручную без компилятора, это может быть не идеально.
Сообщите мне, помогло ли это!
Определить локальную переменную
Отображать, как в вашем коде
В viewAll наборе методов count = 12 и обновите адаптер через слушатель для активности
Источник