shikher.mishra
shikher.mishra

Reputation: 155

How to put the title of the Activity on the right of the toolbar

I have written a code to shift the title of the activity to right.The following is the java code.I am using getSupportActionBar().

Here's the Image of the toolbar I want

   package com.example.hsports.practicesession;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;

public class HomePage extends AppCompatActivity {

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

        setContentView(R.layout.activity_home_page);

        String getUserEmail = getIntent().getExtras().getString("userEmail");
        String getUserPassword = getIntent().getExtras().getString("userPassword");


        TextView displayUserEmail= (TextView) findViewById(R.id.displayUserEmail);
        //this.setTitle("Welcome"+" "+getUserEmail);

       // getActionBar().setTitle("Welcome"+" "+getUserEmail);




        TextView displayUserPassword=(TextView)findViewById(R.id.displayUserPassword);


        displayUserEmail.setText(getUserEmail);
        displayUserPassword.setText(getUserPassword);







        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        TextView welcomeTextView = (TextView) toolbar.findViewById(R.id.welcomeText);
        welcomeTextView.setText("Welcome " + getUserEmail);


        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

}

And this is the xml code which is for the Homepage.

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.hsports.practicesession.HomePage"
    tools:showIn="@layout/activity_home_page"

    >

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay"

        >

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"

            />


        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <TextView
                android:id="@+id/welcomeText"
                android:layout_marginRight="30dp"
                android:layout_alignParentRight="true"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </RelativeLayout>

    </android.support.design.widget.AppBarLayout>



    <TextView
        android:id="@+id/displayUserEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/displayUserPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


</LinearLayout>

I actually want the title of the page to come to right of the above action bar. how to to do this.

The error I am getting is this:

07-14 00:03:03.763 3038-3038/com.example.hsports.practicesession E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.hsports.practicesession, PID: 3038 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hsports.practicesession/com.example.hsports.practicesession.HomePage}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at com.example.hsports.practicesession.HomePage.onCreate(HomePage.java:46) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  at android.app.ActivityThread.-wrap11(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5417)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Upvotes: 0

Views: 3130

Answers (3)

Ashish Ranjan
Ashish Ranjan

Reputation: 5543

You should have a toolbar in your xml layout, so your xml file should look like this :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="right"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.hsports.practicesession.HomePage"
    tools:showIn="@layout/activity_home_page">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <TextView
        android:id="@+id/displayUserEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/displayUserPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


</LinearLayout>

and then you need to set the supportActionBar in the onCreate method like this :

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

after this you can set the title :

getSupportActionBar().setTitle("Welcome"+" "+getUserEmail);

but in your case you're trying to set the title before you've set the supportActionBar, so you're getting NullPointerException.

Also, R.id.toolbar is not in your current xml layout, so again it'll throw a NullPointerException, so change your xml file to add a Toolbar as suggested above.

UPDATE

To have the text on right :

You need to add your own TextView inside the Toolbar and then there's no need to set toolbar title like this :

getSupportActionBar().setTitle("Welcome"+" "+getUserEmail);

Change your activity_home_page.xml code to this :

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.example.hsports.practicesession.HomePage">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" >
            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
                <TextView
                    android:id="@+id/welcomeText"
                    android:layout_marginRight="30dp"
                    android:layout_alignParentRight="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
            </RelativeLayout>

        </android.support.v7.widget.Toolbar>

    </android.support.design.widget.AppBarLayout>

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

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

then in your Activity do this :

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
TextView welcomeTextView = (TextView) toolbar.findViewById(R.id.welcomeText);
welcomeTextView.setText("Welcome " + getUserEmail);

OUTPUT :

enter image description here

Upvotes: 0

Will Evers
Will Evers

Reputation: 942

Your

 this.getSupportActionBar().setTitle("Welcome"+" "+getUserEmail);

is trying to set the title of an action bar that doesn't exist.

Your app theme may not have an action bar or you are not referencing it properly.

Upvotes: 0

Bill
Bill

Reputation: 4646

The null object reference is because you are setting the title of the toolbar before you set the toolbar itself. This can be fixed by:

    //REMOVED
    TextView displayUserPassword=(TextView)findViewById(R.id.displayUserPassword);


    displayUserEmail.setText(getUserEmail);
    displayUserPassword.setText(getUserPassword);



    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    this.getSupportActionBar().setTitle("Welcome"+" "+getUserEmail);

Upvotes: 0

Related Questions