ฉันจะเปลี่ยนชื่อและไอคอนของ android actionbar ได้อย่างไร


225

ฉันพยายามทำบางสิ่งบางอย่างกับ ActionBar ใน Android

ฉันได้เพิ่มรายการใหม่ทางด้านขวาของแถบการกระทำ

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

แถบการกระทำของ Android

คำตอบ:


514

มันง่ายมากที่จะทำสำเร็จ

หากคุณต้องการเปลี่ยนเป็นรหัสโทร:

setTitle("My new title");
getActionBar().setIcon(R.drawable.my_icon);

และตั้งค่าเป็นอะไรก็ได้ที่คุณต้องการ

หรือในไฟล์ XML รายการ Android:

<activity android:name=".MyActivity" 
       android:icon="@drawable/my_icon" 
       android:label="My new title" />  

วิธีเปิดใช้งานปุ่มย้อนกลับในแอปของคุณใช้:

 getActionBar().setHomeButtonEnabled(true);
 getActionBar().setDisplayHomeAsUpEnabled(true);

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


23
หากคุณกำลังใช้ห้องสมุดการสนับสนุนเพื่อเพิ่ม actionbar ใช้แทนgetSupportActionBar getActionBar
Rick Pastoor

3
getActionBar().setHomeButtonEnabled(true)ใช้ API ระดับ 14 หรือสูงกว่าหากคุณต้องการฟังก์ชั่นปุ่มย้อนกลับในรุ่นเก่าและ API ที่ใหม่กว่าที่คุณต้องการgetActionBar().setDisplayHomeAsUpEnabled(true)
Akshat Agarwal

3
getSupportActionBar (). setDisplayShowTitleEnabled (จริง); ก่อน setTitle ("123");
Jose Manuel Abarca Rodríguez

หากคุณใช้รหัส getActionBar (). setIcon (R.drawable.my_icon); คุณทำให้คลิกได้หรือไม่
Skitty

1
@ JoseManuelAbarcaRodríguezขอบคุณนั่นคือสิ่งที่ขาดหายไปสำหรับฉัน ใน Kotlin: แล้วsupportActionBar?.setDisplayShowTitleEnabled(true) supportActionBar?.title = "your title"และมันก็จะต้องมีการทำในonResumeไม่ได้อยู่ในเมื่อสร้างกิจกรรมด้วยonCreate startActivity
Eric Aya

18

ในการทำให้ไอคอนเดียวใช้งานได้โดยแถบการกระทำทั้งหมดของคุณคุณสามารถทำได้ใน Android Manifest ของคุณ

<application
    android:logo="@drawable/Image">

    ...

</application>

1
ขอบคุณ - ฉันต้องการไอคอนที่แตกต่างกันสำหรับแอพภายนอก (เท่าที่เห็นใน "แอพทั้งหมด") และไอคอนอื่นที่ด้านซ้ายของแถบการกระทำ และสิ่งนี้ใช้ได้ผล ไฟล์ Manifest ยังคงมี android: icon = "@ drawable / ic_launcher"
flobacca

2
นี่เป็นวิธีที่ถูกต้องเพราะpre-loadsไอคอนไอคอนการตั้งค่าแบบโปรแกรมช้า!
Muhammad Babar

11

คุณต้องเพิ่มโค้ด 3 บรรทัดนี้ แทนที่ไอคอนด้วยไอคอนของคุณเอง หากคุณต้องการสร้างไอคอนให้ใช้สิ่งนี้

getSupportActionBar().setHomeAsUpIndicator(R.drawable.icon_back_arrow);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);

11

ในแนวทางการออกแบบวัสดุ Android 5.0 ไม่สนับสนุนการใช้ไอคอนใน actionBar

เพื่อเปิดใช้งานมันเพิ่มรหัสต่อไปนี้

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.mipmap.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);

เครดิตไปที่ผู้เขียนบทความนี้


9

หากคุณต้องการเปลี่ยนชื่อแถบการกระทำเพียงให้รหัส 1 บรรทัดต่อไปนี้ใน onCreate () ของกิจกรรมของคุณ

getActionBar().setTitle("Test");

ฉันจะทำให้ชื่อหนังสือมีการเปลี่ยนแปลงได้อย่างไร
Srikar Reddy

7

คุณสามารถเปลี่ยนไอคอนได้โดยเพิ่มไอคอนใด ๆ ที่คุณต้องการลงในโฟลเดอร์ที่สามารถดึงได้จากนั้นเปลี่ยนบรรทัดนี้ในไฟล์ AndroidManifest.xml ของคุณ:

android:icon="@drawable/ic_launcher"

เพื่อให้ตรงกับชื่อไอคอนของคุณ หรือวางไอคอนของคุณเป็น ic_launcher หากเป็นไอคอนเดียวกัน สำหรับสิ่งที่กล่าวให้เพิ่มหรือเปลี่ยนแปลงสตริงที่ตรงกับที่อยู่ในไฟล์ res / values ​​/ strings.xml ของคุณ จากนั้นอีกครั้งในไฟล์ AndroidManifest.xml ให้เปลี่ยนบรรทัดนี้:

android:label="@string/app_name"

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

หวังว่านี่จะช่วยได้


ขนาดนี้ (dp) android:iconในแท็กกิจกรรมควรเป็นเท่าใด
cuddlecheek


5

คุณสามารถทำได้สองวิธี: XML หรือ Java ดูที่นี่: วิธีเปลี่ยนข้อความบนแถบการกระทำ

ดังนั้น:

XML:

<activity android:name=".Hello_World"
              android:label="This is the Hello World Application">
</activity>

Java:

public class TitleBar extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       final boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

       setContentView(R.layout.main);


       if ( customTitleSupported ) {
           getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
           }

       final TextView myTitleText = (TextView) findViewById(R.id.myTitle);
       if ( myTitleText != null ) {
           myTitleText.setText("NEW TITLE");

           // user can also set color using "Color" and then "Color value constant"
          // myTitleText.setBackgroundColor(Color.GREEN);
       }
 }
}

2
ที่จะทำมันจากรหัสที่คุณควรจะเรียกหรือsetTitle(CharSequence text) setTitle(int titleRes)อย่าใช้requestWindowFeature(Window.FEATURE_CUSTOM_TITLE)จนกว่าคุณจะวางแผนที่จะแทนที่แถบหัวเรื่องทั้งหมดด้วยมุมมองที่กำหนดเองของคุณเอง
Karakuri





0

โดยค่าเริ่มต้นชื่อแถบการกระทำจะใช้ป้ายกำกับของกิจกรรมปัจจุบัน แต่คุณสามารถตั้งค่าผ่านทางการเขียนโปรแกรมได้ ActionBar.setTitle()ได้

หากต้องการใช้งานฟังก์ชั่นปุ่ม "ย้อนกลับ" (แม่นยำยิ่งขึ้น ")" ที่คุณกำลังพูดถึงอ่านส่วน "การใช้ไอคอนแอพสำหรับการนำทาง" ในคู่มือนักพัฒนา Action Barคู่มือสำหรับนักพัฒนาแอคชั่นบาร์

ในที่สุดเมื่อต้องการเปลี่ยนไอคอนคู่มือก็ครอบคลุมเช่นกัน กล่าวโดยย่อแถบการกระทำจะแสดงรูปภาพที่ให้มาในandroid:iconรายการapplicationหรือactivityองค์ประกอบของคุณหากมี วิธีปฏิบัติทั่วไปคือการสร้างไอคอนแอปพลิเคชัน (ในความหนาแน่นต่าง ๆ ทั้งหมดที่คุณต้องการ) ชื่อic_launcher.pngและวางไว้ในdrawable-*ไดเรกทอรีของคุณ


0

ฉันพบnon-static method setTitle(CharSequence) cannot be referenced from a static contextข้อผิดพลาดเนื่องจากฉันใช้setTitle()ในคลาส PlaceholderFragment แบบคงที่ ฉันแก้ไขมันโดยใช้getActivity().getActionBar().setTitle("new title");


0

ไปที่รายการกิจกรรมเฉพาะที่คุณต้องการเปลี่ยนชื่อแถบการกระทำและเขียน android: label = "ชื่อเรื่อง"


0

ไปที่ไฟล์AndroidManifest.xml ค้นหา<application>แท็กที่นั่นคุณสามารถเห็นแอททริบิว

android:label="@string/app_name"

ตอนนี้ไปที่res> values> strings.xml

เปลี่ยน

<string name="app_name">MainActivity</string> 

ถึง

<string name="app_name">Your Desired Name</string>

ตัวอย่าง

AndroidManifest.xml

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SubmitForm">

        </activity>
    </application>

strings.xml

<resources>
    <string name="app_name">Your Desired Name</string>
    <string name="action_settings">Settings</string>
</resources>

0

คุณยังสามารถทำสิ่งต่อไปนี้:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
        setSupportActionBar(toolbar)
        setTitle("Activity 2")
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.