Etkinlik başlığı yerine başlatıcı için farklı etiket nasıl ayarlanır?


269

Bu soru daha önce sorulmuştur - ancak hiç tatmin edici bir cevap yoktur! Tekrar deniyorum.

Uygulama başlatıcı simgesine (başlangıç ​​ekranında görüntülenen!) Farklı, daha kısa bir başlık vermek istiyorum. Başlatıcı, etiketini burada olduğu gibi ana etkinliğin etiketi ile ilgili ana bölümden alıyor gibi görünüyor:

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

Uygulamamın adı @ string / app_name için orijinal referansı burada farklı, daha kısa bir dize kaynağına değiştirdim.

AMA - büyük AMA : bu elbette bu etkinliğin varsayılan başlığını da değiştirir! Ve bunun olmasını istemedim, uzun bir uygulama adı için yeterli alan var! Yöntemi onCreatekullanırken uzun başlığı yeniden ayarlamak da setTitle(int)işe yaramaz, çünkü kısa ad kullanıcı tarafından kısa bir süre görünür, ancak fark edilecek kadar uzun!

Ve - lütfen soruma özel bir başlık çubuğuna başvurarak cevap vermeyin ... Sadece aptal bir dize başlığı nedeniyle bu kadar uzun gitmek istemiyorum! Çok az etki için özel bir başlık çubuğu çizmek acı verici!

Var mı kolay bir yolu sadece başlatıcısı ekrana farklı bir dize vermek? Cevaplarınız için teşekkürler!

Düzenleme: Özel bir başlık çubuğuna sahip olmanın bir acı olmasının bir nedeni, varsayılan başlık çubuğuna benzememesidir. Ve sonuçta farklı bir görünüm istemiyorsam, bu bir çözüm olamaz!

Yanıtlar:


470

Görünüşe göre <intent-filter>bir etiket niteliği olabilir. Yoksa etiket üst bileşenden (Etkinlik veya Uygulama) devralınır. Bunu kullanarak, Etkinliğin kendi başlığına sahip olmasına rağmen başlatıcı simgesi için bir etiket ayarlayabilirsiniz.

Bu, emülatörler üzerinde çalışırken, gerçek cihazlarda çalışmayabilir, çünkü kullanılan başlatıcı uygulamasına bağlıdır.

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>

Yan Not: <niyet-filtre> da bir simge niteliği olabilir, ancak açıklanamaz yok değil Aktivite belirtilen simgeyi geçersiz kılar. Etkinlikte belirtilen Simge ve Logosu kullanan SDK 11+ sürümünde yerel ActionBar'ı kullanmayı planlıyorsanız bu sizin için önemli olabilir.

Ek Bilgi: Etiket, Uygulamadan değil Etkinlikten devralınmaktadır.

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

Bu durumda, etiketi yukarıda belirtildiği gibi koymazsak, uygulama_uzat_adı başlatıcı simgesiyle görüntülenir.


5
Gee, bu harika !! Bu gece deneyeceğim. Vay be, neden böyle bir şey düzgün belgelenmemiş ?? !! Bu garip XML yapılarını neden sevmediğimi biliyorum ... ;-)
Zordid

13
Oh hayır, oh hayır. Şimdi hayal kırıklığına uğradım. Saf Android başlatıcıları (emülatörlerde!) Burada tartıştığımız şeyi gerçekten yapıyor, ancak örneğin HTC'nin başlatıcısı, niyetin etiket etiketini yok sayar. :-( Ne kadar aptal! Petek ile Asus Eee Pad de bu etikete
uymuyor

2
Gördüğünüz şey Etkinlik etiketi mi? Bu utanç verici. Yarısı bu belgelenmediği için, fırlatıcı yazan kimsenin muhtemelen doğru davranışı uygulamamasını bekliyordum.
Mark Renouf

12
Benim Gingerbread Nexus One, Nexus S yanı sıra "yeni" bültenleri üzerinde çalışır :-) Ama ne yazık ki, tutarsızlık dude ben bunu kullanmamanızı tavsiye ederim. Cevabı da bir uyarı ile güncelleme eğilimindeyim.
Mark Renouf

3
Dünyada neden bu kadar çok oy kullandığı hakkında hiçbir fikrim yok. İnsanlar bir şeyin işe yaradığını varsaymadan önce kodlarını gerçek bir cihazda test etmiyorlar mı? Bu çözüm, başkaları tarafından belirtildiği gibi, gerçek bir cihazda ÇALIŞMAZ. 4 cihazda (vanilya ve vanilya olmayan Android) test ettim ve hiçbir şey. Bu sadece emülatörde çalışır. Bulduğum tek yol, Anila'nın cevabında açıklandığı gibi setTitle kullanmaktı.
Tiago

35

Aynı şeyi arıyordum ve işte benim için işe yarayan şey buydu.

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

Bu, uygulama başlatıcı simgesine kısa bir ad verecektir.

Uygulama çubuğuna daha büyük bir ad eklemek için eklemeniz yeterlidir:

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

ana etkinlik java dosyanıza.


Başlatıcı etkinliğinizdeki başlığı değiştirmeniz gerekiyorsa bu sorunsuz çalışır. Ancak, simge adını yaklaşık 1 saniye yanıp söner.
rphello101

2
Boş İşlem Çubuğu kısaca (hiç yani başlık yok) gösteren uygulamanızı sakıncası yoksa o zaman İşlem Çubuğu tarzı ve kaldırmayı değiştirebilir showTitledan displayOptions. Ardından başlığı şu etkinliklerde açabilirsiniz onCreate: this.getActionBar (). SetDisplayOptions (ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); Bu, simge adının yanıp sönmesinden daha iyidir, ancak uygulamanızdaki her etkinliğin, gerekiyorsa başlığı açması gerektiği anlamına gelir.
BruceHill

Başlatıcı etkinliğinizdeki başlığı değiştirmeniz gerekiyorsa bu sorunsuz çalışır.

Neden olmasın setTitle(R.string.app_name);?
arekolek

10

Mark Renouf'in çözümü benim için başarısız (Nexus 4 ve Android 4.4 kullanarak). Kısayolları kullanırken başarısız olur, kısayollar uygulama adı yerine ana etkinlik etiketini kullanır. GMail ve Google Keep gibi iyi çalışan bazı uygulamalar gördüm. Ancak bunları açtığınızda, başlık boş ve başlık arasında bir an gibi görüyorum (bu, setTitle () kullanarak başlığı ayarlamadan önce yanıp sönen uygulama adından daha iyi görünüyor).

İşte bulduğum en iyi çözüm :

ActionBar'ın başlığı / etiketi göstermediği bir stil oluşturun:

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

Bir gezinme çekmecesi kullanıyorum ve bir logo kullanıyorum (çünkü uygulamam için bir logo ve bir simge kullanıyorum). Ne istersen kullanabilirsiniz ama showTitle kullanmayın . Ardından AndroidManifest.xml'de MainActivity için temayı ayarlayın:

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

Ardından, MainActivity'nin onCreate () yönteminde, Eylem Çubuğunuzun başlığını ayarlayın:

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

Bundan sonra şunları arayabilirsiniz:

getActionBar().setDisplayShowTitleEnabled(true);

Zor ama değer.


4

Bu muhtemelen ne yapmak istediğinizi tatmin etmeyecektir, ancak çok kısa bir şekilde (varsayılan başlık ile) görüntülenen ve ardından setTitle(int)yöntemi kullanarak seçtiğiniz başlık ile yeni gerçek "ana" etkinliğinizi başlatan bir açılış ekranı oluşturmayı düşündünüz mü? ? Bunu işe yarayıp yaramadığını görmek için denemedim ama bu, elde etmeye çalıştığınız şeyin kesintisiz doğasından daha azını göstermeyen hoş bir çalışma yaratabilir.


2

Yöntem aracılığıyla Support / Appcompat Araç Çubuğu'nu kullanan herkes setSupportActionBar()için Etkinlik başlığı Araç Çubuğu XML'sinde ayarlanabilir:

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

Bu, bildirimde ayarlanan uygulama ve etkinlik etiketlerini geçersiz kılar.

android.support.v7.widget.Toolbar


1

Bu sorun için geçici bir çözüm buldu

yılında manifest.xml

da yaz uygulamanızın adını içinde android:labelbir başlatıcısı (ana) faaliyeti .

Bu, ana etkinliğinizin etiketini uygulama etiketiyle aynı yapar.

Ardından, Başlatıcı (ana) etkinliğinizinonCreate() işlevinde bu ifadeyi yazın

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

Burada Başlatıcı (ana) etkinliğinize vermek istediğiniz etiketi yazın.


0

Bunun gibi bir şey yapabilirsiniz:

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

Başlığı tutmak için özel bir düzen oluşturmanız gerekir. Bu kadar basit olabilir ( my_title.xmlbu durumda denir ):

<?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"/>

Senin içinde AndroidManifest.xmldosyanın sadece başlatıcısı simgesinin gösterildiği olacak budur uygulaması için başlık belirlemek zorunda. Etkinliğiniz için orada bir başlık ayarlamanıza gerek yoktur.


1
Bunun gerçekten doğru olduğundan şüphe ediyorum: uygulamanın etiketi, başlatıcı etiketini tanımlayan şey değildir - yalnızca uygulamanın yüklü uygulamalar listesinde nasıl adlandırıldığını tanımlar (ayarlar-> uygulamalar-> uygulamaları yönet) ve bu etiket Android tarafından da alınır Pazar da. Bu yüzden bunu değiştirmek istemiyorum. Deneme yaparak, fırlatıcının da aldığı etkinliğin başlığı olduğunu öğrendim. Bunun dışında: çözümünüz istemediğim bir kesim başlığı içeriyor! Bu hiçbir zaman varsayılan başlık çubuğu gibi görünmüyor - ya da sadece varsayılan davranışları elde etmek için çok şey yapmam gerekecek - hiç de iyi değil!
Zordid

Hmm ... daha da kötü. Ben sadece çözümünü denedim. Ancak, başlık çubuğu varsayılana hiç benzemez ve daha da kötüsü, özel başlık çubuğu görünmeden kısa bir süre önce varsayılan başlık çubuğu (görmek istemediğim kısa adı gösterir) görüntülenir. Böylece: bu çözüm sadece başlığı kullanarak ayarlamakla aynıdır setTitle. :-(
Zordid

0

Başlatıcı aslında android: etiket ve android: beyan eden etkinlik (ler) simgesi gösterir

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

bu yüzden uygulama etiketi işe yaramaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.