Новичок: установить вид контента, который состоит из двух частей
Я занимаюсь разработкой приложения для Android 2.1.
Я определил LinearLayout
класс:
public class MyTopBar extends LinearLayout {
...
}
Затем у меня есть макет XML-файла (content.xml
):
<LinearLayout>
...
</LienarLayout>
у меня есть RootActivity.java
Я хотел бы установить MyTopBar
как содержание в этом RootActivity.
Тогда у меня есть MyActivity, которая расширяется RootActivity
:
public class MyActivity extends RootActivity{
//set xml layout as content here
}
Я хотел бы установить content.xml в качестве содержимого MyActivity.
В целом, я хотел бы использовать вышеуказанный способ для достижения макета, который MyTopBar
должен быть расположен в верхней части экрана всегда. Другие виды деятельности, которые расширяются RootActivity
будет иметь свое содержание ниже MyTopBar
, Как этого добиться??
2 ответа
1 Вы можете добавить свой кастом LinearLayout
непосредственно в XML-макет MyActivity
класс как это:
<LinearLayout>
<com.full.package.MyTopBar
attributes here like on any other xml views
/>
...
</LinearLayout>
или вы могли бы использовать include
тег для включения макета с пользовательским представлением:
<LinearLayout>
<include layout="@layout/xml_file_containing_mytopbar"
/>
...
</LinearLayout>
2 Использование:
setContentView(R.layout.other_content);
Подготовьте макет для TopBar и добавьте в него свой Topbar, используя layout.addView(topbarObject);
Что касается вашего второго вопроса, насколько я знаю, setContentView может быть вызван только один раз. Однако эти два xml-файла можно надуть, используя View.inflate(other_content.xml)
и добавляется в родительский макет XML, когда вам это нужно. Вы можете removeView()
на родительском макете и addView()
с новым файлом макета.
Изменить: Для решения обоих вопросов, вы можете иметь родительский макет, например. как следующее:
//Omitting the obvious tags
//parent.xml
<RelativeLayout
android:id="@+id/parentLayout">
<RelativeLayout
android:id="@+id/topLayout">
</RelativeLayout>
<RelativeLayout
android:id="@+id/contentLayout">
</RelativeLayout>
</RelativeLayout>
Теперь в вашем коде установите родительский макет как представление контента, создайте объект вашего макета TopBar и добавьте его в topLayout.
setContentView(R.layout.parent);
MyTopBar topBar=new MyTopBar(this);
RelativeLayout toplayout=(RelativeLayout)findViewByid(R.id.topLayout);
topLayout.addView(topBar); //or you can directly add it to the parentLayout, but it won't work for the first question. So better stick to it.
Теперь накачайте нужный макет xml. и добавьте его в content Layout.
RelativeLayout layout=(RelativeLayout)View.inflate(R.layout.content,null);
contentLayout.addView(layout);//Assuming you've done the findViewById on this.
и когда вам нужно показать другой контент XML, просто вызовите следующий код.
contentLayout.removeAllView();
RelativeLayout layout2=(RelativeLayout)View.inflate(R.layout.other_content,null);
contentLayout.addView(layout2);