Bagaimana cara mengatur label yang berbeda untuk peluncur daripada judul aktivitas?

269

Pertanyaan ini telah ditanyakan sebelumnya - tetapi tanpa jawaban yang memuaskan sama sekali! Jadi saya coba lagi.

Saya ingin memberi ikon peluncur aplikasi saya (yang ditampilkan di layar awal!) Yang berbeda, keterangan lebih pendek. Tampaknya peluncur mengambil labelnya dari bagian mainfest tentang label aktivitas utama, seperti di sini:

<activity android:name="MainActivity" android:label="@string/app_short_name">
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Saya sudah mengubah referensi asli ke nama aplikasi saya @ string / app_name ke sumber daya string yang lebih pendek di sini.

TAPI - besar TETAPI : ini juga tentunya perubahan judul default ini kegiatan ini! Dan saya tidak ingin itu terjadi, ada cukup ruang untuk nama aplikasi yang panjang! Mengatur judul panjang lagi dalam onCreatemenggunakan setTitle(int)metode ini juga tidak baik, karena nama pendek akan terlihat oleh pengguna untuk waktu yang singkat, tetapi cukup lama untuk diperhatikan!

Dan - tolong jangan jawab pertanyaan saya dengan merujuk pada bilah judul khusus ... Saya tidak ingin pergi terlalu jauh, hanya karena judul string yang bodoh! Susah sekali menggambar bilah judul khusus untuk efek yang sangat kecil!

Apakah tidak ada cara mudah untuk memberi peluncur sebuah string yang berbeda untuk ditampilkan? Terima kasih atas jawaban Anda!

Sunting: Satu lagi alasan mengapa memiliki bilah judul khusus adalah hal yang menyebalkan adalah karena itu tidak akan terlihat seperti bilah judul standar, saya harus secara eksplisit melakukan hal-hal agar terlihat sama di setiap perangkat! Dan itu tidak bisa menjadi solusi jika, bagaimanapun, saya tidak ingin penampilan yang berbeda!

Zordid
sumber

Jawaban:

470

Rupanya <intent-filter>dapat memiliki atribut label. Jika tidak ada, label akan diwarisi dari komponen induk (Aktivitas atau Aplikasi). Jadi menggunakan ini, Anda dapat mengatur label untuk ikon peluncur, sambil tetap memiliki Kegiatan dengan judul itu sendiri.

Perhatikan bahwa, sementara ini bekerja pada emulator, itu mungkin tidak bekerja pada perangkat nyata, karena itu tergantung pada implementasi peluncur yang digunakan.

http://developer.android.com/guide/topics/manifest/intent-filter-element.html

<activity
  android:name=".ui.HomeActivity"
  android:label="@string/title_home_activity"
  android:icon="@drawable/icon">
  <intent-filter android:label="@string/app_name">
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

Catatan Sisi: <intent-filter> juga dapat memiliki atribut ikon, tetapi tidak dapat dijelaskan bahwa ikon tersebut tidak menimpa ikon yang ditentukan dalam Aktivitas. Ini mungkin penting bagi Anda jika Anda berencana untuk menggunakan ActionBar asli di SDK 11+, yang menggunakan Ikon dan Logo yang ditentukan pada Kegiatan.

Info Tambahan: Label sedang diwarisi dari Aktivitas dan bukan Aplikasi.

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"       
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".StartActivity"
            android:label="@string/app_long_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Dalam hal ini, app_long_name akan ditampilkan dengan ikon peluncur, jika kita tidak memasukkan label seperti yang disebutkan di atas.

Mark Renouf
sumber
5
Astaga, itu hebat !! Saya akan mencobanya malam ini. Wow, mengapa hal seperti itu tidak didokumentasikan dengan baik ?? !! Saya tahu mengapa saya tidak suka struktur XML aneh ini ... ;-)
Zordid
13
Oh tidak, oh tidak. Kecewa sekarang. Peluncur Android murni (pada emulator!) Benar-benar melakukan apa yang kita bahas di sini, tetapi mis. Peluncur HTC mengabaikan label label dari maksud tersebut. :-( Betapa bodohnya! Asus Eee Pad dengan Honeycomb juga TIDAK mematuhi label itu.
Zordid
2
Jadi yang Anda lihat adalah label Activity? Itu memalukan. Saya setengah berharap bahwa karena ini tidak didokumentasikan, siapa pun yang menulis peluncur mungkin tidak akan menerapkan perilaku yang benar.
Mark Renouf
12
Bekerja pada Nexus One Gingerbread saya, Nexus S serta "baru" rilis :-) Tapi sayangnya, Bung dengan inkonsistensi saya sarankan tidak menggunakan ini. Saya cenderung memperbarui jawaban dengan peringatan juga.
Mark Renouf
3
Saya tidak tahu mengapa di bumi ini ada begitu banyak upvotes. Bukankah orang pertama-tama menguji kode mereka pada perangkat nyata sebelum menganggap ada sesuatu yang berfungsi? Solusi ini, seperti yang dinyatakan oleh orang lain, TIDAK bekerja pada perangkat nyata. Saya sudah menguji di 4 perangkat (vanilla dan non-vanilla Android) dan tidak ada. Ini hanya berfungsi pada emulator. Satu-satunya cara yang saya temukan adalah menggunakan setTitle seperti yang dijelaskan pada jawaban Anila.
Tiago
35

Saya mencari hal yang sama dan inilah yang bekerja untuk saya.

<activity android:name="MainActivity" android:label="@string/app_short_name">
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Ini akan memberikan nama pendek untuk ikon peluncur aplikasi Anda.

Untuk menambahkan nama yang lebih besar ke bilah aplikasi, Anda hanya perlu menambahkan:

this.setTitle(getResources().getString(R.string.app_name));

ke file java aktivitas utama Anda.

Anila
sumber
Ini berfungsi tanpa gagal jika Anda perlu mengubah judul pada aktivitas peluncur Anda. Namun, itu flash nama ikon selama sekitar 1 detik.
rphello101
2
Jika Anda tidak keberatan aplikasi Anda menampilkan bilah tindakan kosong sebentar (yaitu tidak ada judul sama sekali) maka Anda dapat mengubah gaya bilah tindakan dan menghapus showTitledari displayOptions. Kemudian Anda dapat mengaktifkan judul di aktivitas onCreateseperti ini: this.getActionBar (). SetDisplayOptions (ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); Ini lebih baik daripada nama ikon yang berkedip, tetapi itu berarti bahwa setiap aktivitas dalam aplikasi Anda harus mengaktifkan judul jika diperlukan.
BruceHill
Ini berfungsi tanpa gagal jika Anda perlu mengubah judul pada aktivitas peluncur Anda.
Mengapa tidak setTitle(R.string.app_name);?
arekolek
10

Solusi Mark Renouf gagal bagi saya (menggunakan Nexus 4 dan Android 4.4). Gagal saat menggunakan pintasan, pintasan menggunakan label aktivitas utama alih-alih nama aplikasi. Saya melihat beberapa aplikasi seperti GMail dan Google Keep yang berfungsi dengan baik. Tetapi ketika Anda membukanya, saya perhatikan itu seperti saat antara judul kosong dan judul muncul (yang tampaknya lebih baik daripada nama aplikasi berkedip sebelum mengatur judul menggunakan setTitle ()).

Jadi di sini adalah solusi terbaik yang saya temukan :

Buat gaya di mana ActionBar tidak menampilkan judul / label:

<style name="NoActionBarTitle" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/NoActionBarTitle.ActionBar</item>
</style>

<style name="NoActionBarTitle.ActionBar" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:displayOptions">showHome|useLogo</item>
</style>

Saya menggunakan laci navigasi dan menggunakan logo (karena saya menggunakan logo dan ikon untuk aplikasi saya). Anda dapat menggunakan apa pun tetapi tidak menggunakan showTitle . Kemudian di AndroidManifest.xml, setel tema untuk MainActivity:

<activity
    android:name="com.xx.xxx.MainActivity"
    android:logo="@drawable/ic_icon_padding"
    android:theme="@style/NoActionBarTitle">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Lalu, dalam metode onCreate () dari MainActivity, setel judul Bilah Tindakan Anda:

getActionBar().setTitle(R.string.your_title);

Setelah itu , Anda dapat menelepon:

getActionBar().setDisplayShowTitleEnabled(true);

Tricky but worth.

Ferran Negre
sumber
4

Ini mungkin tidak akan memuaskan apa yang ingin Anda lakukan, tetapi apakah Anda sudah berpikir untuk membuat splash screen yang menampilkan sangat singkat (dengan judul default) dan kemudian meluncurkan aktivitas "utama" baru Anda yang sebenarnya dengan judul yang Anda pilih menggunakan setTitle(int)metode ini ? Saya belum mencoba ini untuk melihat apakah itu berhasil tetapi yang mungkin menciptakan pekerjaan yang menyenangkan di sekitar yang tidak menunjukkan sifat kurang mulus dari apa yang Anda coba capai.

Adriaan
sumber
2

Bagi siapa saja yang menggunakan Bilah Alat Dukungan / Appcompat melalui setSupportActionBar()metode ini, judul Aktivitas dapat diatur dalam Bilah Alat XML:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    app:title="@string/activity_title"
    ...
/>

Ini akan menggantikan label aplikasi dan aktivitas yang diatur dalam manifes.

android.support.v7.widget.Toolbar

Maksim Ivanov
sumber
1

Saya menemukan solusi untuk masalah ini

Di manifest.xml

Tuliskan nama aplikasi Anda di android:labelaktivitas peluncur (utama) .

Ini akan membuat label aktivitas utama Anda sama dengan label aplikasi.

Kemudian, dalam onCreate()fungsi aktivitas Peluncur (utama) Anda, tulis pernyataan ini

if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle("main activity label");
        }

Di sini, tulis label yang ingin Anda berikan untuk aktivitas Peluncur (utama) Anda.

Tanuj Yadav
sumber
0

Anda dapat melakukan sesuatu seperti ini:

public class FooBar extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // change title
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
    }
}

Anda harus membuat tata letak khusus untuk menahan judul. Ini bisa sesederhana (dipanggil my_title.xmldalam kasus ini):

<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="foo bar"/>

Di AndroidManifest.xmlfile Anda, Anda hanya perlu mengatur judul untuk aplikasi, yang akan ditampilkan di ikon peluncur. Untuk aktivitas Anda, Anda tidak perlu menetapkan judul di sana.

Cristian
sumber
1
Saya ragu itu benar-benar benar: label aplikasi bukan yang menentukan label peluncur-melainkan hanya menentukan bagaimana aplikasi tersebut disebutkan dalam daftar aplikasi yang diinstal (pengaturan-> aplikasi-> kelola aplikasi) dan label ini juga diambil oleh Android Pasar juga. Jadi saya tidak ingin mengubahnya. Dengan bereksperimen saya menemukan itu adalah judul aktivitas yang mengambil peluncur juga. Terlepas dari itu: solusi Anda melibatkan judul yang tidak saya inginkan! Ini tidak pernah terlihat seperti judul bar default sama sekali - atau saya harus melakukan banyak hal hanya untuk mendapatkan perilaku default - tidak baik sama sekali!
Zordid
Hmm ... lebih buruk lagi. Saya baru saja mencoba solusi Anda. Namun, batang judul sama sekali tidak terlihat seperti bawaan dan, lebih parahnya, batang judul standar (menampilkan nama pendek yang tidak ingin saya lihat) ditampilkan sesaat sebelum batang judul khusus muncul. Jadi: solusi ini sama dengan hanya mengatur judul menggunakan setTitle. :-(
Zordid
0

Peluncur sebenarnya menunjukkan ikon android: label dan android: untuk aktivitas yang menyatakan

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

jadi label aplikasi tidak ada gunanya.

Rahul
sumber