Home » Android » Common Clickable Header for All Activities in Android

Common Clickable Header for All Activities in Android

Posted by: admin June 15, 2020 Leave a comment


I have an application with a common Header in all layouts. I want that whenever the user clicks at the the ImageView with id btn_home, the app will go back to a specific activity, my “Main” for instance.

What is the best way to do that?

I know that I can define the onClick(View v) for every activity, but maybe there is a better way to do that. Even making every activity be some (via heritage) other that has the onClick(View v) defined sounds bad.


<RelativeLayout ...>
    <RelativeLayout android:id="@+id/relativeLayout1" ...>
        <ImageView android:id="@+id/logo_cats"></ImageView>
        <ImageView android:id="@+id/btn_home" ...></ImageView>

every layout

<include layout="@layout/header" android:id="@+id/header"
        android:layout_height="wrap_content" android:layout_width="fill_parent" />
How to&Answers:

You can make a custom component out of your header and define ‘onClick()’ in it. For example, make a new class Header that would extend a RelativeLayout and inflate your header.xml there. Then, instead of <include> tag you would use <com.example.app.Header android:id="@+id/header" .... No code duplication and the header becomes totally reusable.

UPD: Here’s some code examples


<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView android:id="@+id/logo" .../>
    <TextView android:id="@+id/label" .../>
    <Button android:id="@+id/login" .../>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_height="fill_parent" ...>
    <com.example.app.Header android:id="@+id/header" .../>
    <!-- Other views -->


public class Header extends RelativeLayout {
public static final String TAG = Header.class.getSimpleName();

protected ImageView logo;
private TextView label;
private Button loginButton;

public Header(Context context) {

public Header(Context context, AttributeSet attrs) {
    super(context, attrs);

public Header(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

public void initHeader() {

private void inflateHeader() {
    LayoutInflater inflater = (LayoutInflater) getContext()
    inflater.inflate(R.layout.header, this);
    logo = (ImageView) findViewById(R.id.logo);
    label = (TextView) findViewById(R.id.label);
    loginButton = (Button) findViewById(R.id.login);


public class ActivityWithHeader extends Activity {
private View mCreate;

protected void onCreate(Bundle savedInstanceState) {


    Header header = (Header) findViewById(R.id.header);
    // and so on

In this example, Header.initHeader() can be moved inside Header’s constructor, but generally this method provides a nice way to pass on some useful listeners. Hope this will help.


Extend the Activity class and build a MyActivity class for example. In this MyActivity class you could include the code for the onClick.

Now create a layout that just holds your header. Include that layout in your activity layouts.

Extend all your activities from MyActivity – that’s it.

If you need the same behaviour in ListActivities create a MyListActivity as well.