如何在Android中实现像Activity这样的主页和子页面?

时间:2010-01-28 08:58:49

标签: android android-activity

我想在每个活动上放置一个共同的横幅和菜单,也有页脚。

任何人都可以指导我如何在Android ???中实现像asp.net这样的主页和子页

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:8)

您可以让每个活动扩展一个公共基类,该基类具有onCreateOptionsMenu方法,每次都使用相同的XML来扩展菜单。虽然你不能拥有多重继承,但是当你想拥有简单的活动和列表活动时,这可能会很棘手。例如。

另一种方法是拥有一个Util类,其中有一个类似setupMenu(Menu)的方法,如果你正在做一些更复杂的菜单设置,你的每个活动都可以调用。

就每个活动的XML UI布局而言,您可以使用<include/>标记添加公共横幅。

答案 1 :(得分:1)

解决方案很简单。

您需要将onCreate函数SetContentView中的“ Activity ”类扩展为基本xml布局,还需要覆盖基本Activity类中的setContentView

例如:

1.使用以下代码

创建“base_layout.xml”
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical"
      android:background="#000000"
      android:padding="15dp" >
    <LinearLayout android:orientation="horizontal" android:background="#000000"
           android:layout_width="fill_parent" android:layout_height="wrap_content"
           android:minHeight="50dp" android:paddingLeft="10dp">
           <ImageView android:layout_width="wrap_content" android:id="@+id/ImageView01"
               android:adjustViewBounds="true" android:layout_height="wrap_content"
               android:scaleType="fitCenter" android:maxHeight="50dp" />
   </LinearLayout>
   <LinearLayout android:id="@+id/linBase"
     android:layout_width="fill_parent"
       android:layout_height="fill_parent" >
   </LinearLayout>
</LinearLayout>    

2.创建“BaseActivity.java”

public class BaseActivity extends Activity {
    ImageView image;
    LinearLayout linBase;     
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        super.setContentView(R.layout.base_layout);        
        linBase = (LinearLayout)findViewById(R.id.linBase);
    }
    @Override
    public void setContentView(int id) {
        LayoutInflater inflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(id, linBase);
    }
}

public class SomeActivity extends BaseActivity {    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.some_layout);
       //rest of code
    }
}

到目前为止我唯一注意到的是,当请求进度条(requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS))时,需要在调用super.onCreate之前完成。我认为这是因为在调用此函数之前还没有任何东西可以绘制。

这对我很有用,希望你会发现这对你自己的编码很有用。

答案 2 :(得分:0)

我遇到了同样的问题并使用ActivityGroup解决了这个问题。 我想菜单项会将用户移动到另一个活动,所以在每个活动中使用相同的菜单关闭应用程序和BACK按钮几乎是不可能的(一段时间之后用户将不得不回过头他所见过的所有活动)。

我没有找到任何英语的好教程,所以我们已经写了一段时间了(它有点太短而且只有抛光,但Google Tranlslated版本应该是可以理解的)检查this

您还可以查看TabHost works

的方式

答案 3 :(得分:0)

ViewStub是解决方案

activity_masterpage.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >    
<ViewStub android:id="@+id/stub_content"
               android:inflatedId="@+id/subTree"
               android:layout_width="match_parent"
               android:layout_height="match_parent" />

stub = (ViewStub) findViewById(R.id.stub_content);
stub.setLayoutResource(R.layout.content_layout);
stub.inflate();