ใน android app วิธี Toolbar.setTitle ไม่มีผล - ชื่อแอปพลิเคชันจะแสดงเป็นชื่อ


298

ฉันพยายามสร้างแอปพลิเคชั่นที่เรียบง่ายโดยใช้ห้องสมุด 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" บน Toolbar% 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>

แต่ปัญหายังไม่ได้รับการแก้ไข


4
FWIW ผมในระดับ API ที่ 22 และผมก็มีปัญหาเหมือนกันถ้าโทร setTitle หลังจากเรียก setSupportActionBar แต่ทำงานถ้าโทร setTitle ก่อน ตามที่อธิบายไว้ในคำตอบด้านล่างหลังจากเรียก setSupportActionBar แล้วแถบการดำเนินการจะเป็นเจ้าของแถบเครื่องมือและการเรียกโดยตรงบนแถบเครื่องมืออาจไม่ทำงาน ฉันรู้ว่าในคำถามของคุณคุณได้โทรจริงแล้ว setTitle ก่อน setSupportActionBar ดังนั้นนี่อาจเป็นสิ่งที่เปลี่ยนแปลงไปเมื่อเร็ว ๆ นี้ ไม่ว่าในกรณีใดการใช้ getSupportActionBar () setTitle ก็ใช้ได้เช่นกัน
JHH

แบบสอบถามเดียวกันถามในstackoverflow.com/questions/15560904/…
JoboFive

ลองใช้ -“ ตั้งชื่อสำหรับกิจกรรมด้วยแถบเครื่องมือได้อย่างไร” link.medium.com/cGVg3zVr0Z
Werder

คำตอบ:


558

พบวิธีแก้ปัญหา:

แทน:

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

และมันใช้งานได้


27
เป็นคนดี แต่ไม่มีเหตุผลที่จะใช้วิธีนี้และไม่ใช่คนอื่น ๆ .... ยินดีต้อนรับสู่ Android 101
DoruChidean

28
getSupportActionBar().setTitle("My title");อาจสร้าง 'java.lang.NullPointerException'
Pratik Butani

8
@PratikButani ตราบใดที่ Toolbar ได้รับการตั้งค่าเป็น setSupportActionBar () ก่อนที่จะเรียก getSupportActionBar () ทำไมมันถึงเป็นเช่นนั้น?
Leon

3
Aha แก้ไขได้อย่างง่ายดาย: ยืนยัน getSupportActionBar ()! = null;
Leon

10
พวกคุณ upvoted @PratikButani แสดงความคิดเห็นหลายครั้งจริงๆเหรอ? หากคุณใช้ชุดรูปแบบสไตล์โดยไม่มีแถบการทำงาน แต่แถบเครื่องมือสนับสนุนที่กำหนดเองv7และคุณลืมที่จะโทรหาsetSupportActionBar(mToolbar)คุณแน่นอนว่าคุณจะได้รับการยกเว้นค่าว่าง แต่ถ้าคุณเรียกมันว่าเป็นแบบนั้น เพิ่งอ่าน - developer.android.com/training/appbar/setting-up.html
25

115

สำหรับทุกคนที่ต้องการตั้งค่าชื่อผ่าน Toolbarบางครั้งหลังจากตั้งค่า SupportActionBar อ่านสิ่งนี้

การใช้งานภายในของไลบรารีการสนับสนุนเพียงตรวจสอบว่า Toolbar มีชื่อ (ไม่ใช่ null) ในขณะที่มีการตั้งค่า SupportActionBar หากมีแล้วชื่อนี้จะถูกนำมาใช้แทนชื่อหน้าต่าง จากนั้นคุณสามารถตั้งค่าชื่อจำลองในขณะที่โหลดชื่อจริง

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

ภายหลัง ...

mActionBarToolbar.setTitle(title);

มันใช้งานได้ แต่ทำไมมันถึงเป็นแบบที่มันจะต้องทำให้ฉันไม่มีเหตุผล ใครบ้างมีคำอธิบายว่าทำไมงานนี้?
Maxwell

1
@ Maxwell มันสมเหตุสมผลเมื่อพิจารณาถึงการออกแบบการโต้ตอบระหว่าง actionbar / แถบเครื่องมือ กิจกรรมควรแสดงชื่อเรื่องหากคุณมีแถบเครื่องมือที่ไม่มีชื่อเรื่องนั้น Android จะถือว่าคุณต้องการควบคุมชื่อเรื่องของกิจกรรมแบบดั้งเดิม
ดึง

1
mActionBarToolbar.setTitle (. getResources () getString (R.string.app_name)); จะตรวจสอบให้แน่ใจว่ามีชื่อเริ่มต้นที่ดีในขณะที่ยังคงมีผลขลังเหมือนเดิมของคำตอบ
Eslam Sameh Ahmed

@ เบราว์เซอร์ใช้งานได้ดูว่ามีคำตอบให้โหวตกี่คำ ... คุณทำอะไรผิดพลาด
user25

@ user25 มันทำงานได้ไม่ดีสำหรับฉันมันลบลูกศรด้านหลังออก จากนั้นผมพบว่าวิธีการแก้ปัญหาอื่น: stackoverflow.com/a/40571324/2914140 this.setTitle("Title"), ที่ไหนthis- เป็นการอ้างอิงถึงกิจกรรม
CoolMind

80

คำตอบข้างต้นเป็นจริงโดยสิ้นเชิง แต่ไม่ได้ผลสำหรับฉัน

ฉันแก้ไขปัญหาด้วยสิ่งต่าง ๆ ต่อไปนี้

จริงๆแล้ว 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");

ตอนนี้ถ้าคุณต้องการที่จะใช้CollapsingToolbarLayoutและToolbarร่วมกันแล้วคุณต้องใช้setTitle()ของCollapsingToolbarLayout

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

ขอให้มันช่วยคุณได้ ขอบคุณ.


1
นั่นทำให้รู้สึกว่าเอาCollapsingToolbarLayoutปัญหาที่แก้ไขแล้วออกไปได้
blueware

2
สำหรับฉันเคล็ดลับในการตั้งค่าชื่อสำหรับ CollapsingToolbarLayout ใช้งานได้ ขอบคุณมาก!
mysliwiec_tech

ฉันสามารถเปลี่ยนคำบรรยายด้วยได้CollapsingToolbarLayoutไหม?
nrofis

2
เนื่องจากแถบเครื่องมือของคุณซ้อนอยู่ภายใต้ CollapsingToolbarLayout ดังนั้นจึงถูกแทนที่ด้วยการยุบเค้าโครงแถบเครื่องมือ มันใช้งานได้สำหรับฉัน
neilQ5

2
พี่ช่วยชีวิตฉันด้วย !!! คุณต้อง setSupportActionbar ทั้งคู่ก่อนที่จะใช้ collapsingToolbarLayout.seTitle ("Title");
Jacky Chong

35

เพียงคุณสามารถเปลี่ยนชื่อแอคติวิตี้ได้โดยใช้

Acitivityname.this.setTitle("Title NAme");

1
หรือเพียงแค่title = "Title"ใน Kotlin หรือบางทีthis.setTitle("Title")ใน Java
CoolMind

33

ลองนี้คุณสามารถกำหนดชื่อโดยตรงใน 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">

ที่ง่ายที่สุด แต่ก็ยังคงฉันต้องการชื่อที่กำหนดเองแบบไดนามิกถ้าคุณมีความคิดใด ๆ
aya salama

15

ในการตั้งชื่อสำหรับแต่ละส่วนย่อยของ Navbar

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

    return myView;
}

12

ลองวิธีนี้ .. วิธีนี้ใช้ได้ผลกับฉัน .. !! !! หวังว่ามันจะช่วยใครซักคน .. !!

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

หากต้องการแสดงโลโก้ในแถบเครื่องมือให้ลองตัวอย่างด้านล่าง // ตั้งค่า drawable ได้

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

แจ้งให้เราทราบผล


ขอบคุณ Ragu Swaminathan .. ฉันพยายามที่จะใช้ SupportActionBar จากกิจกรรมขนาดกะทัดรัดเพื่อตั้งชื่อกิจกรรมของฉัน แต่ไม่สามารถทำมันได้เพราะฉันต้องขยาย BaseGameActivity จากนั้นฉันไปที่แถบเครื่องมือ แต่ชื่อไม่ปรากฏขึ้นในขณะที่ทำงาน วิธีการของคุณโดยใช้กล่องข้อความภายในแถบเครื่องมือทำงาน แนะนำให้คนที่อยู่ในสถานการณ์เดียวกัน
Sarun1001

แถบเครื่องมือมีวิธีตั้งโลโก้แอพ ตรวจสอบคำตอบที่อัปเดตของฉัน
Ragu Swaminathan

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

2
คำตอบนี้เป็นต้นขั้วและควรจะแสดงความคิดเห็นเนื่องจากคำตอบสั้น ๆ เช่นนี้อาจถือว่ามีคุณภาพต่ำ เมื่อคุณมีชื่อเสียงเพียงพอคุณจะสามารถแสดงความคิดเห็นได้ หากคุณมีชื่อเสียงไม่เพียงพออ่านโพสต์นี้เกี่ยวกับการมีส่วนร่วมหากคุณยังไม่มีชื่อเสียงเพียงพอ
บอกรับเป็นสมาชิก

@ascripter มันเป็นคำตอบ
Jemshit Iskenderov

8

โปรดดูhttps://code.google.com/p/android/issues/detail?id=77763 เห็นได้ชัดว่ามันควรจะทำงานแบบนั้น เมื่อคุณเรียกใช้setSupportActionBar()การเรียกเมธอดมันจะเป็นความรับผิดชอบของผู้รับมอบสิทธิ์ ActionBar ในการกำหนดเส้นทางการโทรไปยังมุมมองที่ถูกต้อง


1
ผู้แทน Actionbar นั้นคืออะไร ที่นี่ setTitle () ไม่ทำงานสำหรับแถบเครื่องมือทั้งสำหรับ actionbar สนับสนุน Native Actionbar ถูกปิดใช้งานในชุดรูปแบบ เกิดอะไรขึ้น หากไฟล์แนบรหัสต้นฉบับทำงานใน Android Studio ฉันสามารถติดตามปัญหาได้ด้วยตัวเอง!
WindRider

6

ฉันพยายามเปลี่ยนชื่อแถบเครื่องมือจากส่วน

มันช่วยฉันฉันหวังว่าจะช่วยคนอื่น

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

ภาพหน้าจอ: ป้อนคำอธิบายรูปภาพที่นี่


6

มันไม่ได้เกี่ยวกับ .setTitle

วิธีการเพิ่มเติมของแถบเครื่องมือสนับสนุน (Appcompat v7) ใช้onCreateงานได้กับ

getSupportActionBar().method()

และไม่ทำงานกับ mToolbar.method()

ตัวอย่าง:

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

แม้ว่าวิธีการต่อไปจะทำงานได้ดีโดยไม่ต้องgetSupportActionBar()เข้าonCreate

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()และคุณไม่เห็นการแจ้งเตือนที่น่ารำคาญเกี่ยวกับข้อยกเว้นแบบ null เช่นเดียวกับgetSupportActionBar().setTitle()


หากคุณต้องการเปลี่ยนชื่อหลาย ๆ ครั้งและและใช้แถบเครื่องมือยุบตัวสิ่งนี้จะช่วยได้: stackoverflow.com/questions/26486730/…
user1506104

6

สำหรับทุกคนที่ต้องการตั้งค่าชื่อผ่าน Toolbar บางครั้งหลังจากตั้งค่า SupportActionBar (@sorianiv) และคุณToolbarอยู่ข้างใน a CollapsingToolbarLayoutให้อ่านสิ่งนี้:

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

5

แอปพลิเคชันชื่อจะไม่แสดงเป็นชื่อเริ่มต้นในทุกกิจกรรมคุณสามารถแทรกชื่อที่แตกต่างกันในทุกกิจกรรม ในไฟล์กิจกรรมของคุณตะโกน onCreate เพียงวางบรรทัดเดียวเพื่อตั้งชื่อ

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("Your Title Here");

เพียงแค่เปลี่ยนข้อความ "Your Title Here" เป็นข้อความของคุณ


4

เพียงใช้สิ่งนี้ในอะแดปเตอร์ของคุณโดยที่ MainActivity เป็น AppCompactActivity ของคุณ โทรจากที่ใดก็ได้

((MainActivity) context).getSupportActionBar().setTitle(titles.get(position));

4

ฉันทำให้มันทำงานโดยใช้ -

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

1
คุณไม่จำเป็นต้องใช้postถ้าคุณเปลี่ยนชื่อเรื่องใน UI ด้ายซึ่งฉันคิดว่าเป็น 90% ของกรณี
Vadim Kotov

3

หากคุณใช้CollapsibleToolbarLayoutพร้อมกับToolbarคุณจะต้องตั้งชื่อในทั้งรูปแบบ

ตั้งค่า Toolbar ของคุณเป็นแถบการกระทำใน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());

วิธีนี้ใช้ได้ผลถ้าคุณพบว่าคุณสามารถตั้งชื่อได้หนึ่งครั้ง แต่ไม่สามารถเปลี่ยนได้หลังจากนั้น ตรวจสอบให้แน่ใจว่าคุณกำลังตั้งชื่อของแถบเครื่องมือยุบ
Hylianpuffball

ถ้าคุณต้องการที่จะเปลี่ยนชื่อหลังจากเวลาผ่านไปด้วยแถบเครื่องมือการยุบคุณสามารถทำได้: stackoverflow.com/questions/26486730/…
user1506104

2

ลองสิ่งนี้:

รหัส 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);
}

2

หากเป้าหมายของคุณคือการตั้งค่าสตริงแบบคงที่ในแถบเครื่องมือวิธีที่ง่ายที่สุดคือการตั้งค่าป้ายกิจกรรมใน AndroidManifest.xml:

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

แถบเครื่องมือจะได้รับสายนี้โดยไม่มีรหัสใด ๆ (ใช้ได้กับฉันด้วยห้องสมุด v27)


2

ฉันมีพฤติกรรมแปลก ๆ ที่อาจช่วยคุณได้
สิ่งนี้ใช้งานได้ แต่ไม่มีผลใน onCreate เท่านั้น:

toolbar.setTitle("title");

ลองใช้สิ่งนี้ใน onCreate:

yourActivityName.this.setTitle("title")

2

ในการเปลี่ยนชื่อสำหรับกิจกรรมที่แตกต่างกัน

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

setTitle (R.string.title); กิจกรรมง่ายขึ้น แต่ไม่ทำงาน
toshkinl

2
 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       //custom toolbaar
       getSupportActionBar().setTitle("Abhijeet");

    }
}

1

แม้ว่าจะไม่เกี่ยวข้องกับการตั้งค่านี้ทันที แต่ฉันพบว่าการลบ "CollapsingToolbarLayout" ออกจาก XML ของฉันซึ่งล้อมรอบแถบเครื่องมือของฉันไว้ใน AppBarLayout ทำให้ทุกอย่างทำงานได้

ดังนั้นนี่

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

จากนั้นฉันตั้งชื่อในกิจกรรมของ onCreate ก่อนที่จะเรียก setSupportActionBar ()


คุณสามารถทำได้ หากคุณต้องการเค้าโครงแถบเครื่องมือที่ยุบลงไปให้ตรวจสอบสิ่งนี้: stackoverflow.com/questions/26486730/…
user1506104

@Chantell Osejo มันก็ใช้ได้กับฉันเหมือนกันแม้ฉันจะใช้เลย์เอาต์เดียวกัน ขอบคุณ
Paramjit Singh Rana

1

สิ่งนี้สามารถทำได้โดยการตั้งค่าandroid:labelคุณลักษณะของกิจกรรมของคุณในAndroidManifest.xmlไฟล์:

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

จากนั้นเพิ่มบรรทัดนี้ใน onCreate ():

getSupportActionBar().setDisplayShowTitleEnabled(true);

0

ตรวจสอบให้แน่ใจว่าคุณเพิ่มตัวเลือกนี้:

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);

0

คำตอบอยู่ในเอกสาร (ซึ่งคุณสามารถหาได้ที่นี่ ):

ในการใช้วิธีอรรถประโยชน์ของ ActionBar ให้เรียกใช้เมธอด getSupportActionBar () ของกิจกรรม วิธีการนี้จะส่งกลับการอ้างอิงไปยังวัตถุ ActionBar appcompat เมื่อคุณมีการอ้างอิงนั้นแล้วคุณสามารถเรียกวิธีการใด ๆ ของ ActionBar เพื่อปรับเปลี่ยนแถบแอพ ตัวอย่างเช่นหากต้องการซ่อนแถบแอปให้เรียก ActionBar.hide ()

นั่นคือทางออกที่คุณค้นพบจริง แค่คิดว่าจะให้การอ้างอิงถึงเอกสารอย่างเป็นทางการ (ซึ่งดูเหมือนจะมีน้อยอ่าน)


0

ใน Kotlin คุณสามารถทำได้:

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar

class SettingsActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_settings)

        val toolbar = findViewById<Toolbar>(R.id.toolbar)
        setSupportActionBar(toolbar)
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        supportActionBar?.setTitle(R.string.title)

    }

    override fun onSupportNavigateUp() = true.also { onBackPressed() }

}

-2

สิ่งนี้เกิดขึ้นเพราะคุณใช้ทั้ง Toolbar และ ActionBar ตอนนี้เมื่อคุณต้องการใช้ Toolbar เป็นแถบการกระทำสิ่งแรกที่คุณต้องทำคือปิดการใช้งานแถบการกระทำที่มีให้

Theme.AppCompat.NoActionBarวิธีที่ง่ายที่สุดคือการมีธีมของคุณเพิ่มขึ้นจาก


ขออภัยฉันเข้าใจผิดคำถาม
Haresh Chhelana

1
@HareshChhelana คุณโพสต์คำตอบ แต่คุณรู้หรือไม่ว่าปัญหาคืออะไร
Paresh Mayani

ฉันคิดว่าอันไหนที่เกี่ยวข้องกับปัญหาชุดการตั้งค่าแถบการกระทำที่ yi ให้ ans ดังกล่าวและเมื่อคุณรู้ฉันนี้ฉันลบ ans ของฉันดังนั้นตอนนี้คุณไม่ต้องกังวลเกี่ยวกับพี่ชายของฉันเข้าใจผิด
Haresh Chhelana

1
@PareshMayani ขอบคุณสำหรับคำตอบของคุณ แต่ไม่สามารถแก้ปัญหาของฉันได้ โปรดตรวจสอบคำถามที่อัปเดตแล้ว
krossovochkin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.