2012-03-05 1 views
0

Я разрабатываю приложение Android 2.1.Newbie: набор содержимого, который состоит из двух частей

Я определил 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. Как это достичь?

ответ

1

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); 
+0

Привет, я обновил свое сообщение, пожалуйста, посмотрите.В принципе, я хотел бы отделить MyTopBar от XML-макета, так что я только инициирую MyTopBar в RootActivity, другие действия, которые расширяют корневую активность, только устанавливают xml-контент, в целом, я хочу показать MyTopBar поверх экрана, с другим xml макет покажет ниже ... –

+0

@ Leem.fin Я знаю, что вы пытаетесь сделать, вероятно, бар во всех ваших действиях. Лучше всего, я думаю, использовать тег 'include', а простой включает в себя макет xml, который содержит только ваше собственное пользовательское представление. Вы не можете установить 'contentView' в' RootActivity', потому что он будет заменен в подклассах. – Luksprog

+0

@ Leem.fin Вот ссылка от google http://developer.android.com/resources/articles/layout-tricks-reuse.html – Luksprog

0

У вас нет Layout для 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. и добавьте его в 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); 
+0

Привет, звучит неплохое решение, не могли бы вы уточнить код. Спасибо. (По крайней мере, первый, надеюсь, также ответ на мой второй вопрос) –

+0

Я обновил свой ответ, чтобы иметь полный код, однако из-за моей лени я опустил в нем некоторые очевидные вещи. Надеюсь, вы сможете их заполнить. – noob