如何在Android中为每个活动添加页眉和页脚

3
我想在每个活动的顶部和底部添加一个ImageButton、一个button和一个textview。我考虑使用header和footer。因此,我想在每个Android活动中添加一个页眉和页脚。我不知道该如何实现这一点。我不需要编写页眉或页脚的源代码。我想知道的是,我需要在每个xml文件中添加页眉和页脚吗?还是我需要定义两个header.xmlfooter.xml并将这些xml文件用于其他xml文件中?或者是否有其他方法,例如从该活动的java文件中使用引用。任何帮助都将受到赞赏。
6个回答

10
定义两个独立的文件header.xmlfooter.xml,然后使用。

`

<include layout="@layout/footer"/>

4

请查看此链接:

这个问题与你的问题非常相似。如果您想要这些页眉和页脚,您应该构建一个自定义视图并在应用程序中使用它。您可以使用类似操作栏的东西作为您的页眉。


谢谢,但我已经查过了。 :) 仍然感谢您的帮助。 - Vikas Gupta

2

我知道,这是最好的做法。你可以使用include xml标签在其他布局文件中包含其他.xml布局文件,例如:

...
<include layout="@layout/header"/>
...
<include layout="@layout/footer"/>
...

谢谢您的帮助,现在我会尝试做到的 :) - Vikas Gupta
必须使用相对布局来制作页眉和页脚吗? - Vikas Gupta

2

Android没有头部和底部的概念。但是,您可以在布局中定义概念上的头部和底部,然后通过调用它们(例如)在其他布局中多次使用:

<include layout="@layout/header"/>

您可以查看这个示例,更好地了解如何在整个应用程序中重复使用布局。 http://developer.android.com/training/improving-layouts/reusing-layouts.html

1
必须使用相对布局来制作页眉和页脚吗? - Vikas Gupta
不是的,那只是一个例子。我通常使用RelativeLayout(它们比LinerLayout更好)。我也在LinearLayout中使用过它们。但我想为了更快地理解示例,他们使用了RelativeLayout。 - Siddharth Lele
如果您不介意的话,能否为我解释一下线性布局和相对布局之间的区别,或者为什么相对布局更好? - Vikas Gupta
2
在LinerLayouts中,所有作为布局一部分的元素都会相互排列。您唯一可以操作位置的方式是设置方向等属性。另一方面,Relativelayouts将元素“相对”于彼此放置,并且在我看来提供了无与伦比的灵活性。例如,从此链接http://developer.android.com/resources/tutorials/views/hello-relativelayout.html中,通过这个简单的属性:android:layout_below="@id/label",一个带有id "@+id/entry"的EditText被放置在一个id为"@id+/label"的TextView下方。 - Siddharth Lele
请按照以下RelativeLayout的示例进行操作:http://developer.android.com/resources/tutorials/views/hello-relativelayout.html - Siddharth Lele
显示剩余2条评论

2
This is best example for Common Header Footer in All Activities


BaseActiivty.java
=================



 public class BaseActivity extends FragmentActivity {

    RelativeLayout mRelativeLayout;
    FrameLayout frame_container;
    TextView header_txt,footer_txt;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);


    }

    @Override
    public void setContentView(int layoutResID)

    {
        mRelativeLayout = (RelativeLayout) getLayoutInflater().inflate(R.layout.activity_base, null);
        frame_container = (FrameLayout) mRelativeLayout.findViewById(R.id.frame_container);
        // set the drawer dialog_view as main content view of Activity.
        setContentView(mRelativeLayout);
        // add dialog_view of BaseActivities inside framelayout.i.e. frame_container
        getLayoutInflater().inflate(layoutResID, frame_container, true);

        header_txt = (TextView) findViewById(R.id.header_txt);
        footer_txt = (TextView) findViewById(R.id.footer_txt);

    }
}


   MainActivity.java
   =================

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }





activity_base.xml
=================





<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/content_base"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <RelativeLayout
        android:id="@+id/header_RL"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@color/colorAccent">

        <TextView
            android:id="@+id/header_txt"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textSize="30dp"
            android:gravity="center"
            android:text="Header"/>

    </RelativeLayout>


    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/footer_RL"
        android:layout_below="@+id/header_RL">

    </FrameLayout>


    <RelativeLayout
        android:id="@+id/footer_RL"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:background="@color/colorAccent">

        <TextView
            android:id="@+id/footer_txt"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textSize="30dp"
            android:gravity="center"
            android:text="Footer"/>

    </RelativeLayout>

</RelativeLayout>





activity_main.xml
==================


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="Hello World!"
            android:textSize="30dp" />

    </LinearLayout>
</RelativeLayout>

1

2
谢谢,但我想我会选择include。对于页眉和页脚,必须使用相对布局吗? - Vikas Gupta
您可以选择适合您页眉/页脚要求的任何布局。 - krishnakumarp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接