Android是否在Struts中使用MasterPage概念如.NET或Tiles概念在所有页面上添加Header?

时间:2012-01-19 05:00:18

标签: android android-layout

我正在开发Android应用程序。在此应用程序中,Logo栏显示在所有页面(活动)上,或者我们可以说它在所有页面上都有标题。 这个徽标栏有很少的图标,如主页,登录,通知等,点击这些图标对应的导航将执行。

例如,如果用户在应用程序中的任何位置并单击主页图标,则他将导航到应用程序的主页。

我可以通过编码将logobar.XML扩展到我的All Activity中。但问题是我必须在Logo Bar的所有图标的所有页面上调用onClickListener。 这不是一个好的编程方式。 如何在不重复代码的情况下在所有其他活动中实施徽标栏活动? Android中是否有像Struts中那样的.Net或tile概念中的任何Master Page概念?

请指导我。

5 个答案:

答案 0 :(得分:1)

编辑:好吧,我明白了。可能this answer会帮助你。

尝试使用Tab小部件和tabactivity检查此链接以使用片段和标签http://developer.android.com/reference/android/app/TabActivity.html for android。我认为对于较低版本我们也可以使用它。这就是链接所说的 - “你可以使用v4支持库,它提供了与DONUT兼容的Fragment API版本。”

答案 1 :(得分:1)

你必须在xml中创建masterLayout,并且必须将它包含在另一个中 你必须拥有它的布局。

答案 2 :(得分: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);        
        image = (ImageView)findViewById(R.id.ImageView01);
        image.setImageResource(R.drawable.header);
        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之前完成。我认为这是因为在调用此函数之前还没有任何东西可以绘制。

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

答案 3 :(得分:0)

有类似的东西,但仅适用于api 11+(3.2和Android 4.0.x冰淇淋三明治)。它叫做动作栏(http://developer.android.com/reference/android/app/ActionBar.html)。

答案 4 :(得分:0)

我使用XML文件完成了这项工作。

我只是从XML文件创建运行时视图,并将其添加到Activity布局。

我为此创建了方法

public static void setLoginview(Context ctx, RelativeLayout layout) {
    LayoutInflater linflater = (LayoutInflater) ctx
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View myView = linflater.inflate(R.layout.loginheader, null);    
    layout.addView(myView);
    try {
        layout.getChildAt(0).setPadding(0, 50, 0, 0);
    } catch (Exception e) {
    }
}

ctx是应用程序contetx,layout是我想要添加该视图的布局。