web-dev-qa-db-fra.com

Dans Android app, la méthode Toolbar.setTitle n'a aucun effet - le nom de l'application est indiqué comme titre.

J'essaie de créer une application simple à l'aide de la bibliothèque Android-support-v7: 21.

Extraits de code:
MainActivity.Java

public class MainActivity extends ActionBarActivity {

    Toolbar mActionBarToolbar;

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

        mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);            
        mActionBarToolbar.setTitle("My title");
        setSupportActionBar(mActionBarToolbar);
}

activity_main.xml

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true"
    Android:orientation="vertical">

    <Android.support.v7.widget.Toolbar            
        Android:id="@+id/toolbar_actionbar"
        Android:background="@null"
        Android:layout_width="match_parent"
        Android:layout_height="?actionBarSize"
        Android:fitsSystemWindows="true" />

</LinearLayout>

Mais au lieu de "Mon titre" sur la barre d'outils% nom de l'application% est affiché.
On dirait que la méthode setTitle n'a aucun effet.
Je voudrais montrer "Mon titre".

PD: Avant, styles.xml était:

<style name="AppTheme" parent="Theme.AppCompat">
    <item name="windowActionBar">false</item>
</style>

Alors, je pensais que la barre d’action n’est pas utilisée. J'ajoute NoActionBar au style parent:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="windowActionBar">false</item>
</style>

Mais le problème n'est pas résolu.

272
krossovochkin

Trouvé la solution:

Au lieu de:

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);            
mActionBarToolbar.setTitle("My title");
setSupportActionBar(mActionBarToolbar);

J'ai utilisé:

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);            
setSupportActionBar(mActionBarToolbar);
getSupportActionBar().setTitle("My title");

Et il fonctionne.

527
krossovochkin

Lisez ce qui suit pour tous ceux qui doivent configurer le titre via la barre d’outils après le paramétrage de SupportActionBar.

L'implémentation interne de la bibliothèque de support vérifie simplement si la barre d'outils a un titre (non nul) au moment où le SupportActionBar est configuré. Si tel est le cas, ce titre sera utilisé à la place du titre de la fenêtre. Vous pouvez ensuite définir un titre factice pendant que vous chargez le titre réel.

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
mActionBarToolbar.setTitle("");
setSupportActionBar(mActionBarToolbar);

plus tard...

mActionBarToolbar.setTitle(title);
108
sorianiv

La réponse ci-dessus est totalement vraie mais ne fonctionne pas pour moi.

J'ai résolu mon problème avec les choses suivantes.

En fait, mon XML est comme ça:

<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/confirm_order_mail_layout"
    Android:layout_width="match_parent"
    Android:layout_height="fill_parent">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/confirm_order_appbar_layout"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <Android.support.design.widget.CollapsingToolbarLayout
            Android:id="@+id/confirm_order_list_collapsing_toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|enterAlways">

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/confirm_order_toolbar_layout"
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                Android:background="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

            </Android.support.v7.widget.Toolbar>
        </Android.support.design.widget.CollapsingToolbarLayout>
    </Android.support.design.widget.AppBarLayout>
</Android.support.design.widget.CoordinatorLayout>

J'ai essayé toutes les options et après tout, je viens de retirer CollapsingToolbarLayout parce que je n'ai pas besoin de l'utiliser dans ce XML Donc, mon XML final est comme:

<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/confirm_order_mail_layout"
    Android:layout_width="match_parent"
    Android:layout_height="fill_parent">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/confirm_order_appbar_layout"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/confirm_order_toolbar_layout"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

        </Android.support.v7.widget.Toolbar>
    </Android.support.design.widget.AppBarLayout>
</Android.support.design.widget.CoordinatorLayout>

Vous devez maintenant utiliser setTitle() comme ci-dessus pour répondre:

mActionBarToolbar = (Toolbar) findViewById(R.id.confirm_order_toolbar_layout);            
setSupportActionBar(mActionBarToolbar);
getSupportActionBar().setTitle("My Title");

Maintenant, si vous voulez utiliser CollapsingToolbarLayout et Toolbar alors vous devez utiliser setTitle() sur CollapsingToolbarLayout

CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.confirm_order_mail_layout);
collapsingToolbarLayout.setTitle("My Title");

Puisse-t-il vous aider. Je vous remercie.

75

Vous pouvez simplement changer n'importe quel nom d'activité en utilisant

Acitivityname.this.setTitle("Title NAme");
35
roshan posakya

Essayez ceci, vous pouvez définir le titre directement en XML:

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

Pour définir le titre de chaque titre de fragment de la barre de navigation

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
    myView = inflater.inflate(R.layout.second_layout, container, false);
    getActivity().setTitle("title");

    return myView;
}
15
roshan posakya

Essayez ceci .. cette méthode fonctionne pour moi .. !! J'espère que ça peut aider quelqu'un .. !!

<Android.support.v7.widget.Toolbar  
 xmlns:app="http://schemas.Android.com/apk/res-auto"  
 Android:id="@+id/my_awesome_toolbar"  
 Android:layout_width="match_parent"  
 Android:layout_height="wrap_content"  
 Android:background="?attr/colorPrimary"  
 Android:minHeight="?attr/actionBarSize"  
 app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >  

<TextView  
   Android:id="@+id/toolbar_title"  
   Android:layout_width="wrap_content"  
   Android:layout_height="wrap_content"  
   Android:gravity="center"  
   Android:singleLine="true"  
   Android:text="Toolbar Title"  
   Android:textColor="@Android:color/white"  
   Android:textSize="18sp"  
   Android:textStyle="bold" />  

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

Pour afficher le logo dans la barre d’outils, essayez l’extrait ci-dessous. // Set drawable

toolbar.setLogo(ContextCompat.getDrawable(context, R.drawable.logo));

Laissez-moi savoir le résultat.

12
Ragu Swaminathan
 getSupportActionBar().setTitle("Your Title");
11
Hanisha

Veuillez consulter https://code.google.com/p/Android/issues/detail?id=7776 . Apparemment, cela est supposé fonctionner comme ça. Une fois que vous avez appelé la méthode setSupportActionBar(), il incombe au délégué ActionBar d’acheminer l’appel vers la vue correcte.

8
redDragonzz

Il ne s'agit pas que de .setTitle

plusieurs méthodes de Support Toolbar (Appcompat v7) dans onCreate ne fonctionne qu'avec

getSupportActionBar().method()

et ne fonctionne pas avec mToolbar.method()

exemples:

getSupportActionBar().setTitle("toolbar title");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

bien que les méthodes suivantes fonctionnent correctement sans getSupportActionBar() dans onCreate

mToolbar.setVisibility(View.VISIBLE);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //
    }

Problème uniquement avec l’événement onCreate, vous pouvez toujours utiliser mToolbar.setTitle() ultérieurement au lieu d’ennuyeux getSupportActionBar().setTitle(), par exemple si vous ajoutez ceci dans onCreate cela fonctionnera (car il sera exécuté ultérieurement, après onCreate )

mHandler.post(new Runnable() {
    @Override
    public void run() {
        mToolbar.setTitle("toolbar title");
    }
});

Je préfère utiliser cette solution https://stackoverflow.com/a/35430590/454852 que https://stackoverflow.com/a/26506858/454852 car si vous changez de titre plusieurs fois (dans différentes fonctions), il est plus confortable d'utiliser mToolbar.setTitle() qu'un plus long getSupportActionBar().setTitle() et vous ne voyez pas de notification gênante à propos d'une exception nulle comme avec getSupportActionBar().setTitle()

6
user25

J'ai essayé de renommer la barre d'outils du fragment

Cela m'a aidé, j'espère aider quelqu'un d'autre

Activity activity = this.getActivity();
Toolbar toolbar = (Toolbar) activity.findViewById(R.id.detail_toolbar);
        if (toolbar != null) {
            activity.setTitle("Title");
        }

//toolbar.setTitle("Title"); did not give the same results

Capture d'écran: enter image description here

5
Nikita G.

Je l'ai fait fonctionner en utilisant -

toolbar.post(new Runnable() {
            @Override
            public void run() {
                toolbar.setTitle("My Title");
            }
        });
4
Ankit Aggarwal

Utilisez simplement ceci dans votre adaptateur, où MainActivity est votre AppCompactActivity. Appelez-le de n'importe où.

((MainActivity) context).getSupportActionBar().setTitle(titles.get(position));
4
Axay Coolmoco

J'ai un comportement étrange qui peut vous aider.
Cela fonctionne mais cela n'a aucun effet dans onCreate uniquement:

toolbar.setTitle("title");

Essayez d’utiliser ceci dans onCreate:

yourActivityName.this.setTitle("title")
2
user2167877

Essaye ça:

code XML

<Android.support.v7.widget.Toolbar
    Android:layout_width="match_parent"
    Android:layout_height="120dp"
    Android:id="@+id/tool_bar"
    Android:background="@color/tablayout"
    Android:theme="@style/ToolBarStyle"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/app_name"
        Android:layout_gravity="center"
        Android:id="@+id/toolbar_title"
        Android:textSize="18sp"
        Android:textColor="@color/white"/>
    </Android.support.v7.widget.Toolbar>

code Java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar) findViewById(R.id.tool_bar);
    toolbar_text = (TextView)findViewById(R.id.toolbar_title);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    toolbar.setLogo(R.drawable.ic_toolbar);
}
2

Si vous utilisez CollapsibleToolbarLayout avec Toolbar, vous devrez définir le titre dans les deux présentations

définir votre barre d'outils comme barre d'action dans la méthode onCreate

protected void setUpToolBar() {

    if (mToolbar != null) {
        ((HomeActivity) getActivity()).setSupportActionBar(mToolbar);
        mToolbar.setTitleTextColor(Color.WHITE);
        mToolbar.setTitle("List Detail");
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getActivity()
                        .getSupportFragmentManager().popBackStack();
            }
        });
        ((HomeActivity) getActivity()).getSupportActionBar()
                .setDisplayHomeAsUpEnabled(true);
    }
}

Plus tard, mettez simplement à jour le titre de la barre d’outils en utilisant la méthode setTitle

 mToolbar .setTitle(productFromShoppingList.getProductName()); 
 mCollapsingToolbar.setTitle(productFromShoppingList.getProductName());
2
Hitesh Sahu

Pour changer le titre de chaque activité

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pizza);
    setTitle(getResources().getText(R.string.title));
}
2
roshan posakya

Si votre objectif est de définir une chaîne statique dans la barre d'outils, le moyen le plus simple consiste à définir simplement le libellé de l'activité dans AndroidManifest.xml:

<activity Android:name=".xxxxActivity"
          Android:label="@string/string_id" />

La barre d'outils obtiendra cette chaîne sans code. (fonctionne pour moi avec les bibliothèques v27.)

2
Timores

Pour tous ceux qui ont besoin de configurer le titre via la barre d'outils un certain temps après le réglage de SupportActionBar (@sorianiv) ET votre Toolbar se trouve dans un CollapsingToolbarLayout, lisez ceci:

mToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);
Toolbar toolbar = findViewById(R.id.toolbar);
//toolbar.setTitle(""); // no need to do this
//mToolbarLayout.setTitle("Title"); // if you need an initial title, do this instead
setSupportActionBar(toolbar);

Puis plus tard

mToolbarLayout.setTitle("New Title");
1
user1506104

Cela peut être fait en définissant l'attribut Android:label de votre activité dans le fichier AndroidManifest.xml:

<activity Android:name="my activity"
 Android:label="The Title I'd like to display" />

Et puis ajoutez cette ligne à la onCreate ():

getSupportActionBar().setDisplayShowTitleEnabled(true);
1
A-Sharabiani

Bien que cela ne soit pas immédiatement pertinent pour cette configuration particulière, j'ai constaté que la suppression de "CollapsingToolbarLayout" de mon XML qui encapsulait ma barre d'outils dans un AppBarLayout permettait à tout de fonctionner.

Donc ça:

      <Android.support.design.widget.AppBarLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content">

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/toolbar"
                Android:layout_height="?attr/actionBarSize"
                app:layout_scrollFlags="scroll|enterAlways"
                app:navigationIcon="@drawable/ic_arrow_back_white_24dp" />

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

Au lieu de cela:

        <Android.support.design.widget.AppBarLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content">

            <Android.support.design.widget.CollapsingToolbarLayout
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:id="@+id/collapsingToolbar"
                Android:minHeight="?attr/actionBarSize"
                app:layout_scrollFlags="enterAlways|scroll|snap">

                <Android.support.v7.widget.Toolbar
                    Android:id="@+id/toolbar"
                    Android:layout_height="?attr/actionBarSize"
                    app:navigationIcon="@drawable/ic_arrow_back_white_24dp" />
            </Android.support.design.widget.CollapsingToolbarLayout>

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

Ensuite, je définis le titre dans onCreate de l'activité, avant que setSupportActionBar () soit appelée.

0
Chantell Osejo

Assurez-vous d'ajouter cette option:

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);
0
McLan

La réponse se trouve dans la documentation (que vous pouvez trouver ici ):

Pour utiliser les méthodes de l'utilitaire ActionBar, appelez la méthode getSupportActionBar () de l'activité. Cette méthode retourne une référence à un objet appcompat ActionBar. Une fois que vous avez cette référence, vous pouvez appeler l’une des méthodes ActionBar pour ajuster la barre d’application. Par exemple, pour masquer la barre d'applications, appelez ActionBar.hide ().

C'est la solution que vous avez réellement trouvée. Je viens de penser à donner une référence à la documentation officielle (que apparemment peu de gens ont tendance à lire).

0
Ely