Как я могу изменить включенный макет xml в другой макет кода Java?
У меня проблема. Я разрабатываю приложение для Android.
Я включил второй макет в первый макет, например:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="clip_horizontal"
android:layout_alignParentLeft="true"
android:id="@+id/rlMenu"
>
<Button
android:id="@+id/bMusteriler"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Musteriler"
android:textSize="45dp"
android:layout_alignParentLeft="true"
/>
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/rlEkranlar"
>
<include
android:id="@+id/include1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
layout="@layout/ikinci" />
</RelativeLayout>
</RelativeLayout>
Проблема в том, как я могу изменить включенный макет при нажатии кнопки (по java-коду)?
Извините за мой английский.
Спасибо.
Ответы
Ответ 1
Я предлагаю ViewFlipper
внутри RelativeLayout
ваших операторов include
. Попробуйте вот так:
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/vf"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<include android:id="@+id/include1" layout="@layout/ikinci" />
<include android:id="@+id/map" layout="@layout/third_layout" />
</ViewFlipper>
Доступ к ViewFlipper, как показано ниже.
Первоначально выводится первая компоновка:
ViewFlipper vf = (ViewFlipper)findViewById(R.id.vf);
Для кнопки onClickListener:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vf.setDisplayedChild(1);
}
});
Ответ 2
Существует два способа изменения макетов в коде:
а. Изменить видимость. Включите буксировку различных макетов в xml:
<include
android:id="@+id/id1"
android:visibility="visible"/>
<include
android:id="@+id/id2"
android:visibility="gone"/>
и в коде используйте это:
findViewById(R.id.id1).setVisibility(View.GONE);
findViewById(R.id.id2).setVisibility(View.VISIBLE);
В. Вручную добавьте детей. Используйте тот же xml, который вы используете сейчас, и добавьте код, который вы можете добавить или удалить:
yourRelativeLayout.removeAllViews();
yourRelativeLayout.addView(viewToInclude);
Offtopic:
Вам не нужно писать параметр xmlns:android
в RelativeLayout. Только для самого верхнего тега в файле макета.
Ответ 3
Вы пытались получить экземпляр текущего представления xml, который вы включили в другой xml, и используйте findViewById()
. View v - это первый макет и против этого представления вы используете .findViewById()