Новичок: установить вид контента, который состоит из двух частей - PullRequest
0 голосов
/ 05 марта 2012

Я разрабатываю приложение для 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 голос
/ 05 марта 2012

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 голосов
/ 05 марта 2012

Имейте вакантное расположение для 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);
...