Имейте вакантное расположение для TopBar и добавьте в него свою Topbar, используя layout.addView(topbarObject);
Что касается вашего второго вопроса, насколько я знаю, setContentView может быть вызван только один раз. Однако эти два xml-файла можно надуть, используя View.inflate(other_content.xml)
, и добавлять в макет родительского xml всякий раз, когда вам это нужно. Вы можете removeView()
на родительском макете и addView()
с новым файлом макета.
Edit:
Для решения обоих вопросов вы можете иметь родительский макет, например. как следующее:
//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. и добавьте его в contentLayout.
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);