Всем привет! В приложении при нажатии кнопки появляется 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);
}
Главный вопрос, а нужно ли удалять? По сути необходимо, чтобы нажатие передовалось ниже. Если сделать textView.setVisibility(View.INVISIBLE), оно не будет обрабатывать нажатия, и видимо тоже
Существует обратный метод для удаления вида - 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.
Ссылка на первоисточник. Надеюсь я вам помог в решении вашей проблемы. Удачи :)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Имеется Программа написанная на Java в Android Studio, используется стандартная WebView для отображения сайта(написан с использованием phaser js)Приложение...
Подскажите почему так: моё приложение, которое я написал в android studio, не устанавливается по пути и не создаёт там пакеты: внутренняя память/Android/dataИли...