Как программно удалить Textview

184
11 января 2019, 12:10

Всем привет! В приложении при нажатии кнопки появляется Textview с фоном. При нажатии кнопки повторно, Textview "пропадает". Проблема в том, что остальные кнопки, которое оно закрывало, становятся невозможно нажать. То есть Textview не пропадает совсем, а просто становится прозрачным. Как полностью его убрать?

public
        void onClick(View s) {
            InfoText.setMovementMethod(new ScrollingMovementMethod());
            int status = (Integer) s.getTag();
            if (status == 2) {
                InfoText.setText(R.string.Infotext);
                InfoText.setBackgroundColor(Color.parseColor("#000000"));
                s.setTag(1);
            }else {
                InfoText.setText(null);
                InfoText.setBackgroundResource(null);
                s.setTag(2);
            }
Answer 1

Главный вопрос, а нужно ли удалять? По сути необходимо, чтобы нажатие передовалось ниже. Если сделать textView.setVisibility(View.INVISIBLE), оно не будет обрабатывать нажатия, и видимо тоже

Answer 2

Существует обратный метод для удаления вида - removeView(), а также метод removeAllViews(), удаляющий все дочерние элементы родителя. Рассмотрим следующий пример. Создадим разметку, где компонент LinearLayout с идентификатором master будет родителем для будущих элементов, которые мы будем добавлять или удалять:

<?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="vertical" >
        <CheckBox
            android:id="@+id/enlayer1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Enable Layer 1" />
        <CheckBox
            android:id="@+id/enlayer2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Enable Layer 2" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/master"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" />
</LinearLayout>

Создадим пару дополнительных макетов, которые будет дочерними элементами для FrameLayout. Мы будем управлять ими программно.

layer1.xml

<?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" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Layer 1" />
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="EditText" />
</LinearLayout>

layer2.xml

<?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" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Layer 2" />
    <CheckBox
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="CheckBox A" />
    <CheckBox
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="CheckBox B" />
    <CheckBox
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="CheckBox C" />
</LinearLayout>

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

public class MainActivity extends Activity {
    LinearLayout mainLayer;
    View layer1, layer2;
    CheckBox enableLayer1, enableLayer2, enableLayer3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        enableLayer1 = (CheckBox) findViewById(R.id.enlayer1);
        enableLayer2 = (CheckBox) findViewById(R.id.enlayer2);
        mainLayer = (LinearLayout) findViewById(R.id.master);
        LayoutInflater inflater = getLayoutInflater();
        layer1 = inflater.inflate(R.layout.layer1, null);
        layer2 = inflater.inflate(R.layout.layer2, null);
        enableLayer1.setOnCheckedChangeListener(enableLayer1ChangeListener);
        enableLayer2.setOnCheckedChangeListener(enableLayer2ChangeListener);
    }
    CheckBox.OnCheckedChangeListener enableLayer1ChangeListener = new CheckBox.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            if (isChecked) {
                mainLayer.addView(layer1);
            } else {
                mainLayer.removeView(layer1);
            }
        }
    };
    CheckBox.OnCheckedChangeListener enableLayer2ChangeListener = new CheckBox.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            if (isChecked) {
                mainLayer.addView(layer2);
            } else {
                mainLayer.removeView(layer2);
            }
        }
    };
}

в вашем случае все будет почти так же, только удалять вы будете вам TextView.

Ссылка на первоисточник. Надеюсь я вам помог в решении вашей проблемы. Удачи :)

READ ALSO
Кодировка VOLLEY &lt;-&gt; Spring

Кодировка VOLLEY <-> Spring

Отправляю русские буквы через Volley вот так

175
WebView Android уменьшить расширение для контента

WebView Android уменьшить расширение для контента

Имеется Программа написанная на Java в Android Studio, используется стандартная WebView для отображения сайта(написан с использованием phaser js)Приложение...

193
Установка своих приложений на Android

Установка своих приложений на Android

Подскажите почему так: моё приложение, которое я написал в android studio, не устанавливается по пути и не создаёт там пакеты: внутренняя память/Android/dataИли...

185