web-dev-qa-db-ja.com

Androidアプリでは、Toolbar.setTitleメソッドは効果がありません - アプリケーション名はタイトルとして表示されます

私はAndroid-support-v7:21ライブラリを使って簡単なアプリケーションを作成しようとしています。

コードスニペット:
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>

しかし、ツールバーの "My title"の代わりに%application name%が表示されます。
setTitleメソッドは効果がないようです。
「私の役職」を見せたいのですが。

UPD: 以前のstyles.xmlは次のとおりです。

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

だから、私はアクションバーは使用されていないと思いました。スタイルの親にNoActionBarを追加します。

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

しかし、問題は解決されていません。

258
krossovochkin

解決策が見つかりました:

の代わりに:

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

私は使った:

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

そしてそれはうまくいきます。

515
krossovochkin

SupportActionBarを設定した後しばらくしてタイトル{ツールバーからを設定する必要がある人は、これを読んでください。

サポートライブラリの内部実装は、SupportActionBarが設定された瞬間にツールバーにタイトル(nullではない)があるかどうかをチェックするだけです。ある場合は、ウィンドウのタイトルの代わりにこのタイトルが使用されます。あなたは本物のタイトルをロードしている間あなたはダミーのタイトルを設定することができます。

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

後...

mActionBarToolbar.setTitle(title);
107
sorianiv

上記の答えは完全に真実ですが、私にとってはうまくいきません。

次のことで問題を解決しました。

実際、私のXMLは次のようなものです。

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

私はすべてのオプションを試しましたが、結局、CollapsingToolbarLayoutを削除したのは、その特定のXMLで使用する必要がないためです。したがって、私の最終XML

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

これで、上記の回答のようにsetTitle()を使用する必要があります。

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

CollapsingToolbarLayoutToolbarを一緒に使用する場合は、CollapsingToolbarLayoutsetTitle()を使用する必要があります

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

それがあなたを助けますように。ありがとうございました。

単にあなたが使用することによって任意の活動名を変更することができます

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

これを試してください、あなたは直接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">
31

各Navbarフラグメントのタイトルにタイトルを設定する

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

    return myView;
}
13
roshan posakya

これを試してください..この方法は私のために働きます..!誰かに役立つことを願っています..!

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

ツールバーにロゴを表示するには、以下のスニペットを試してください。 //描画可能に設定

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

結果を教えてください。

11
 getSupportActionBar().setTitle("Your Title");
10
Hanisha

https://code.google.com/p/Android/issues/detail?id=77763 を参照してください。どうやらそれはそのように動作するはずです。 setSupportActionBar()メソッド呼び出しを呼び出すと、その呼び出しを正しいビューにルーティングするのはActionBarデリゲートの責任です。

8
redDragonzz

.setTitleだけではありません

onCreate内のSupport Toolbar(Appcompat v7)のその他のメソッドは、でのみ動作します。

getSupportActionBar().method()

mToolbar.method()では動作しません

例を示します。

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

ただし、次のメソッドはonCreategetSupportActionBar()がなくても正常に機能します。

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

onCreateイベントにのみ問題がありますが、mToolbar.setTitle()を煩わしくする代わりにgetSupportActionBar().setTitle()を後で使うことができます。例えば、これをonCreateに追加するとうまくいきます(onCreateの後に実行されるため)

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

https://stackoverflow.com/a/35430590/4548520 より https://stackoverflow.com/a/26506858/4548520 このタイトルを変更した場合mToolbar.setTitle()を使うよりもgetSupportActionBar().setTitle()を使うほうが楽なので、getSupportActionBar().setTitle()のようにnull例外についての煩わしい通知は表示されません。

5
user25

フラグメントからツールバーの名前を変更しようとしました

それは私を助けました、私は他の誰かを助けることを望みます

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

スクリーンショット: enter image description here

5
Nikita G.

私はそれを使用して動作させました -

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

MainActivityがあなたのAppCompactActivityであるところで、単にあなたのアダプタでこれを使用してください。どこからでも電話できます。

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

私はあなたを助けることができる奇妙な行動をしています。
これは機能していますが、onCreateのみには影響しません。

toolbar.setTitle("title");

OnCreateでこれを使ってみてください。

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

これを試して:

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>

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);
}

CollapsibleToolbarLayoutToolbarを併用している場合は、両方のレイアウトでtitleを設定する必要があります

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);
    }
}

後でsetTitleメソッドを使ってツールバーのタイトルを単純に更新する

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

各活動のタイトルを変更する

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

あなたの目標がツールバーに静的な文字列を設定することであるならば、それをする最も簡単な方法は単純にAndroidManifest.xmlで活動ラベルを設定することです:

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

ツールバーはコードなしでこの文字列を取得します。 (v27ライブラリで私のために働きます。)

2
Timores

SupportActionBar(@sorianiv)の設定後しばらくしてツールバーからタイトルを設定する必要がある人のためにAND your ToolbarCollapsingToolbarLayoutの中にあります。これを読んでください:

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);

じゃあ後で、

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

これは、Android:labelファイルであなたのアクティビティのAndroidManifest.xml属性を設定することによって行うことができます。

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

そしてこの行をonCreate()に追加します。

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

この特定の設定には直接関係ありませんが、ツールバーをAppBarLayout内にラップしていたXMLから "CollapsingToolbarLayout"を削除すると、すべてが機能することがわかりました。

したがって、この:

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

これの代わりに:

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

次に、setSupportActionBar()が呼び出される前に、アクティビティのonCreateにタイトルを設定します。

0
Chantell Osejo

このオプションを必ず追加してください。

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

答えはドキュメントにあります(あなたは ここ を見つけることができます):

ActionBarユーティリティメソッドを使用するには、アクティビティのgetSupportActionBar()メソッドを呼び出します。このメソッドは、appcompat ActionBarオブジェクトへの参照を返します。参照を取得したら、任意のActionBarメソッドを呼び出してアプリバーを調整できます。たとえば、アプリバーを非表示にするには、ActionBar.hide()を呼び出します。

それがあなたが実際に見つけた解決策です。公式文書への参照を与えることを考えただけである(どうやらそれはほとんど読む傾向がない)。

0
Ely