Русские Блоги
Разница между атрибутами видимости 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.
Источник
Android — сделать TextView невидимым
Когда мое приложение запускается, пользователь должен коснуться экрана, прежде чем начнется настоящее действие. У меня есть textView , который дает подсказку коснуться экрана.
После касания экрана я хочу, чтобы текст стал невидимым . Прямо сейчас textView никогда не исчезает и всегда остается впереди.
6 ответов
1. Всегда используйте if(something) , если хотите узнать, является ли он true/false , вместо того, чтобы писать if(something == true) [что-то является логическим значением, которому присвоено значение true.]
2. Если вы укажете свои представления XML на метод, используя android:onClick , как показано ниже,
, Какой смысл реализовывать OnGestureListener ?
Если я делаю это onCreate , я инициализирую свое мнение
3. Если я действительно хочу прикосновение, я сделаю это
- Теперь вы можете видеть в третьем параметре есть MotionEvent , вы можете идентифицировать движение ACTION_DOWN , ACTION_MOVE и ACTION_UP
Теперь подумайте, использовали ли вы их когда-либо. У вас в голове возникла идея касания, поэтому вы пытались использовать события касания. Но вы ими не пользуетесь. Так что он делает то же, что и onClickListner в вашем случае. Если хотите движения, используйте третий, который я дал.
Но просто вы можете использовать
Те, кто просматривает onClickListner или setOnTouchListener , вы можете напрямую использовать их внутри onCreate или хранить их внутри метода, и вы можете вызывать этот метод из onCreate . Зачем хранить логическое значение? Ничего особенного
Обратите внимание, что я рассматривал myView как макет фона, а не textView, фон — тот, который вы нажимаете / касаетесь
Вы проверяете, коснулся ли экран в onCreate() , который вызывается только один раз в начале действия. Инициализируйте TextView глобально и установите его видимость внутри onTouch(View v, MotionEvent event) Также ваш onTouch() не верен. Вы должны переопределить public boolean onTouch(View v, MotionEvent event)
Вместо реализации OnGestureListener добавьте setOnTouchListener в ваше корневое представление вашего макета активности
Например, rlTestView — это идентификатор корневого макета вашей деятельности, затем используйте приведенный ниже код в своем методе oncreate .
Итак, теперь вы несколько раз меняли код вопросов, и я надеюсь, что это последнее изменение. Только чем мог помочь мой ответ.
Вы сделали это в своем onCreate() :
Но это выполняется напрямую и не имеет ничего общего с вашим методом onTouch() . Давайте предположим, что ваш onTouch() работает правильно. Сделайте TextView глобальным :
Инициализировать его в onCreate() :
А затем спрятать его в onTouch() :
Но вы должны быть уверены, что ваш метод onTouch() работает. Вы можете сделать Toast или Журнал для проверки. Вы должны быть уверены, что:
— TextView находится внутри вашего макета XML, который вы установили с помощью setContentView(R.layout.activity_game);
— Метод onTouch() объявлен в атрибуте xml вашего TextView
И установите для clickable вашего TextView значение true:
РЕДАКТИРОВАТЬ
Если вы реализуете onGestureListener() , я полагаю, что событие касания используется слушателем, и ваш TextView не распознал onTouch() . Если вы не обнаруживаете жесты в своей деятельности, удалите эту реализацию.
Используйте приведенный ниже код для метода onCreate и установите yes visibility вместо GONE вместо невидимого. Также укажите текущее значение visibilty для TextView в onTouch и установите для него значение
Источник