Новичок: установить вид контента, который состоит из двух частей

Я занимаюсь разработкой приложения для 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);
Другие вопросы по тегам