2016-07-12 5 views
0

Ich habe einen Code geschrieben, um den Titel der Aktivität nach rechts zu verschieben. Das folgende ist der Java-Code.Ich verwende getSupportActionBar().Wie Sie den Titel der Aktivität auf der rechten Seite der Symbolleiste setzen

Hier ist die 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(); 
      } 
     }); 
    } 

} 

Und dies ist der XML-Code, der für die Homepage ist.

Ich möchte eigentlich den Titel der Seite rechts von der obigen Aktionsleiste kommen. wie dies zu tun ist.

Der Fehler Ich erhalte, ist dies:

07-14 00: 03: 03.763 3038-3038/com.example.hsports.practicesession E/Android Runtime: FATAL AUSNAHME: Haupt Prozess: com.example. hsports.practicesession, PID: 3038 java.lang.RuntimeException: Aktivität kann nicht gestartet werden ComponentInfo {com.example.hsports.practicesession/com.example.hsports.practicesession.HomePage}: java.lang.NullPointerException: Versuch, die virtuelle Methode aufzurufen 'void android.widget.TextView.setText (java.lang.CharSequence)' für eine Nullobjekt-Referenz bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2416) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) bei android.app.ActivityThread.-wrap11 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java .lang.reflect.Method.invoke (Native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit. jav a: 616) Verursacht von: java.lang.NullPointerException: Versuch, die virtuelle Methode 'void android.widget.TextView.setText (java.lang.CharSequence)' für eine Nullobjekt-Referenz bei com.example.hsports.practicesession aufzurufen .HomePage.onCreate (HomePage.java:46) bei android.app.Activity.performCreate (Activity.java:6237) bei android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1107) bei android.app.ActivityThread .performLaunchActivity (ActivityThread.java:2369) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) bei android.app.ActivityThread.-wrap11 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 616)

+0

Könnten Sie bitte Screenshot zur Verfügung stellen zu zeigen, was Sie wollen eigentlich erreichen? –

+0

Sind Sie sicher, dass Sie eine Aktionsleiste in der Aktivität haben? überprüfen Sie Ihre 'style.xml' und sehen Sie, ob Sie eine ohne Actionbar –

+0

auch verwenden, die Actionbar ist unabhängig von der Ansicht. Das Einstellen der Schwerkraft auf das XML wird nicht helfen. Sie müssen Ihre eigene benutzerdefinierte Actionbar implementieren –

Antwort

0

Sie sollten eine Symbolleiste in Ihrem XML-Layout haben, so dass Ihre XML-Datei sollte wie folgt aussehen:

<?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> 

und dann müssen Sie die supportActionBar im onCreate Methode wie folgt setzen:

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

danach können Sie den Titel ein:

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

Aber in deinem Fall versuchst du, den Titel zu setzen, bevor du supportActionBar gesetzt hast, also bekommst du NullPointerException.

Auch R.id.toolbar ist nicht in Ihrem aktuellen XML-Layout, so wieder wird es eine NullPointerException werfen, so ändern Sie Ihre XML-Datei, um eine Toolbar wie oben vorgeschlagen hinzuzufügen.

UPDATE

Um den Text auf der rechten Seite haben:

Sie müssen Ihre eigenen TextView innerhalb des Toolbar hinzufügen und dann gibt es keine Notwendigkeit Symbolleiste Titel wie folgt festgelegt:

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

Ändern Sie Ihren activity_home_page.xml Code wie folgt:

<?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> 

dann in Ihrem Activity dies tun:

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

+0

Ich möchte keine neue Symbolleiste erstellen. Die Symbolleiste, die bereits aus der android.manifest-Datei vorhanden ist, möchte ich den Text auf der rechten Seite für diese Aktivität vorhanden sein. –

+0

oh ja, können Sie einen Screenshot der gewünschten Ausgabe zeigen? –

+0

Wie kann ich Ihnen den Screenshot schicken? –

0

Der Null-Objektverweis ist, weil Sie den Titel der Symbolleiste festlegen, bevor Sie die Symbolleiste selbst festlegen. Dies kann durch festgesetzt:

//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); 
+0

aber immer noch der Titel in der Symbolleiste geht nicht auf der rechten Seite.Was dafür zu tun? –

0

Ihre

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

versucht, den Titel einer Aktionsleiste zu setzen, die nicht existieren.

Ihr App-Thema verfügt möglicherweise nicht über eine Aktionsleiste oder Sie verweisen nicht ordnungsgemäß darauf.

Verwandte Themen