गतिविधि शीर्षक के बजाय लांचर के लिए अलग-अलग लेबल कैसे सेट करें?


269

यह सवाल पहले पूछा गया है - लेकिन कोई संतोषजनक जवाब नहीं है! तो मैं इसे फिर से कोशिश कर रहा हूँ।

मैं अपना एप्लिकेशन लॉन्चर आइकन (वह स्क्रीन पर प्रदर्शित किया जाता है!) एक अलग, छोटा कैप्शन देना चाहता हूं। ऐसा लगता है कि लांचर अपने लेबल को मुख्य गतिविधि के लेबल के बारे में मुख्य धारा से लेता है, जैसा कि यहाँ है:

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

मैंने अपने ऐप के नाम @ string / app_name के मूल संदर्भ को पहले से ही एक अलग, छोटे स्ट्रिंग संसाधन में बदल दिया है।

लेकिन - बड़ा लेकिन : यह भी निश्चित रूप से इस गतिविधि के डिफ़ॉल्ट शीर्षक बदल जाता है! और मैं नहीं चाहता था कि ऐसा हो, एक लंबे एप्लिकेशन नाम के लिए पर्याप्त जगह है! विधि onCreateका उपयोग करके फिर से लंबे शीर्षक का निर्धारण करना setTitle(int)अच्छा नहीं है, क्योंकि संक्षिप्त नाम उपयोगकर्ता को थोड़े समय के लिए दिखाई देगा, लेकिन नोटिस करने के लिए पर्याप्त है!

और - कृपया किसी कस्टम टाइटलबार का संदर्भ देकर मेरे प्रश्न का उत्तर न दें ... मैं उस लंबे रास्ते पर नहीं जाना चाहता, बस एक बेवकूफ स्ट्रिंग शीर्षक के कारण! यह बहुत कम प्रभाव के लिए एक कस्टम टाइटल बार खींचने के लिए एक दर्द है!

क्या लांचर को प्रदर्शित करने के लिए एक अलग स्ट्रिंग देने का कोई आसान तरीका नहीं है ? आपके उत्तर के लिए धन्यवाद!

संपादित करें: कस्टम टाइटलबार होने का एक और कारण दर्द है कि यह डिफ़ॉल्ट टाइटलबार की तरह नहीं दिखेगा, मुझे स्पष्ट रूप से चीजों को प्रत्येक डिवाइस पर एक जैसा दिखने के लिए करना होगा! और यह एक समाधान नहीं हो सकता है, अगर सब के बाद, मैं एक अलग उपस्थिति नहीं चाहता!

जवाबों:


470

जाहिरा तौर <intent-filter>पर एक लेबल विशेषता हो सकती है। यदि यह अनुपस्थित है तो लेबल मूल घटक (गतिविधि या अनुप्रयोग) से विरासत में मिला है। तो इसका उपयोग करते हुए, आप लॉन्चर आइकन के लिए एक लेबल सेट कर सकते हैं, जबकि अभी भी गतिविधि के साथ यह स्वयं का शीर्षक है।

ध्यान दें, जबकि यह एमुलेटर पर काम करता है, यह वास्तविक उपकरणों पर काम नहीं कर सकता है, क्योंकि यह लॉन्चर कार्यान्वयन पर निर्भर करता है जिसका उपयोग किया जाता है।

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>

साइड नोट: <आशय-फ़िल्टर> में एक आइकन विशेषता भी हो सकती है, लेकिन अनावश्यक रूप से यह गतिविधि में निर्दिष्ट आइकन को ओवरराइड नहीं करता है । यह आपके लिए महत्वपूर्ण हो सकता है यदि आप SDK 11+ में देशी ActionBar का उपयोग करने की योजना बनाते हैं, जो गतिविधि पर निर्दिष्ट चिह्न और लोगो का उपयोग करता है।

गयी जानकारी: लेबल को एक्टिविटी से विरासत में मिला है न कि एप्लिकेशन से।

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

इस मामले में, app_long_name लॉन्चर आइकन के साथ प्रदर्शित किया जाएगा, अगर हम ऊपर बताए अनुसार लेबल नहीं लगाते हैं।


5
जी, यह बहुत अच्छा है !! मैं इसे आज रात कोशिश करूँगा। वाह, ऐसी बात ठीक से प्रलेखित क्यों नहीं है ?? !! मुझे पता है कि मुझे ये अजीब XML संरचनाएं क्यों पसंद नहीं हैं ... ;-)
ज़ॉर्डीड

13
अरे नहीं, अरे नहीं। अब निराश है। शुद्ध एंड्रॉइड लांचर (एमुलेटर पर!) वास्तव में वही करते हैं जो हमने यहां चर्चा की थी, लेकिन उदाहरण के लिए एचटीसी के लांचर इरादे के लेबल टैग को अनदेखा करते हैं। :-( कैसे बेवकूफ! हनीकॉम्ब के साथ
आसू

2
तो आप जो देख रहे हैं वह गतिविधि लेबल है? कि एक शर्म की बात है। मुझे आधी उम्मीद थी कि चूंकि यह प्रलेखित नहीं है, इसलिए लांचर लिखने वाला कोई भी व्यक्ति शायद सही व्यवहार को लागू नहीं करेगा।
मार्क रेनॉफ

12
मेरे जिंजरब्रेड नेक्सस वन, नेक्सस एस के साथ-साथ "नए" रिलीज पर काम करता है :-) लेकिन दुख की बात है कि असंगतता के प्रति कठोर, मैं इसका उपयोग नहीं करने की सिफारिश करूंगा। मैं एक चेतावनी के साथ उत्तर को अद्यतन करने के लिए इच्छुक हूं।
मार्क रेनॉफ

3
मुझे पता नहीं है कि पृथ्वी पर इतने सारे उत्थान क्यों हैं। कुछ काम करने से पहले लोग असली डिवाइस पर अपने कोड का परीक्षण न करें? यह समाधान, जैसा कि दूसरों द्वारा कहा गया है, वास्तविक डिवाइस पर काम नहीं करता है। मैंने 4 उपकरणों (वेनिला और गैर-वैनिला एंड्रॉइड) में परीक्षण किया है और कुछ भी नहीं। यह केवल एमुलेटर पर काम करता है। मुझे जो एकमात्र तरीका मिला, वह सेटिटेल का उपयोग करने का था जैसा कि अनिला के उत्तर पर वर्णित है।
टियागो

35

मैं उसी चीज की तलाश में था और यहां मेरे लिए क्या काम किया।

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

यह आपके एप्लिकेशन लॉन्चर आइकन को एक छोटा नाम देगा।

एप्लिकेशन बार में एक बड़ा नाम जोड़ने के लिए आपको बस जोड़ना होगा:

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

अपने मुख्य गतिविधि जावा फ़ाइल के लिए।


यदि आप अपने लॉन्चर गतिविधि पर शीर्षक बदलने की आवश्यकता है, तो यह बिना विफल रहता है। हालांकि, यह लगभग 1 सेकंड के लिए आइकन का नाम फ्लैश करता है।
rphello101

2
यदि आप एक खाली ActionBar संक्षेप में (यानी सब पर कोई शीर्षक) दिखा अपने अनुप्रयोग कोई आपत्ति नहीं है तो आप अपने ActionBar शैली और निकालने बदल सकते हैं showTitleसे displayOptions। फिर आप onCreateइस तरह की गतिविधि में शीर्षक को चालू कर सकते हैं : this.getActionBar ()। SetDisplayOptions (ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); यह आइकन नाम फ्लैशिंग से बेहतर है, लेकिन इसका मतलब यह है कि आपके एप्लिकेशन की हर गतिविधि को शीर्षक की आवश्यकता होने पर उसे चालू करना होगा।
ब्रूसहिल

यदि आप अपने लॉन्चर गतिविधि पर शीर्षक बदलने की आवश्यकता है, तो यह बिना विफल रहता है।

क्यों नहीं setTitle(R.string.app_name);?

10

मार्क रेनॉफ का समाधान मेरे लिए विफल रहता है (Nexus 4 और Android 4.4 का उपयोग करके)। शॉर्टकट का उपयोग करते समय यह विफल हो जाता है, शॉर्टकट ऐप नाम के बजाय मुख्य गतिविधि लेबल का उपयोग करते हैं। मैंने कुछ ऐप जैसे GMail और Google Keep को देखा जो ठीक काम करता है। लेकिन जब आप उन्हें खोलते हैं, तो मैं नोटिस करता हूं कि शीर्षक के बीच एक पल खाली है और शीर्षक दिखाई देता है (जो सेटटाइटल ()) का उपयोग करके शीर्षक सेट करने से पहले चमकती ऐप नाम से बेहतर लगता है।

तो यहाँ सबसे अच्छा समाधान मैंने पाया है :

एक शैली बनाएं जहां ActionBar शीर्षक / लेबल नहीं दिखाता है:

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

मैं एक नेविगेशन दराज का उपयोग कर रहा हूं और एक लोगो का उपयोग कर रहा हूं (क्योंकि मैं अपने ऐप के लिए एक लोगो और एक आइकन का उपयोग करता हूं)। आप जो कुछ भी उपयोग कर सकते हैं लेकिन showTitle का उपयोग नहीं करते । फिर AndroidManifest.xml में, 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>

फिर, मुख्यता की ऑनक्रिएट () विधि में, अपने एक्शन बार का शीर्षक सेट करें:

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

इसके बाद , आप कॉल कर सकते हैं:

getActionBar().setDisplayShowTitleEnabled(true);

मुश्किल लेकिन लायक।


4

यह संभवत: आपको संतुष्ट नहीं करेगा कि आप क्या करना चाहते हैं, लेकिन क्या आपने एक स्प्लैश स्क्रीन बनाने के बारे में सोचा है जो बहुत संक्षेप में (डिफ़ॉल्ट शीर्षक के साथ) प्रदर्शित होती है और फिर setTitle(int)विधि का उपयोग करके आपके चयन के शीर्षक के साथ आपकी नई वास्तविक "मुख्य" गतिविधि लॉन्च करती है। ? मैंने यह देखने की कोशिश नहीं की है कि यह काम करता है लेकिन यह एक सुखद काम पैदा कर सकता है जो कि आप जो हासिल करने की कोशिश कर रहे हैं उससे कम नहीं है।


2

विधि के माध्यम से समर्थन / Appcompat टूलबार का उपयोग करने वाले किसी के लिए setSupportActionBar(), गतिविधि शीर्षक टूलबार XML में सेट किया जा सकता है:

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

यह मैनिफ़ेस्ट में सेट किए गए एप्लिकेशन और गतिविधि लेबल को ओवरराइड करेगा।

android.support.v7.widget.Toolbar


1

मैं इस समस्या के लिए एक समाधान पाया

में manifest.xml

आपके लिखें एप्लिकेशन के नाम में android:labelसे लांचर (मुख्य) गतिविधि

यह आपकी मुख्य गतिविधि के लेबल को ऐप लेबल के समान बना देगा।

फिर, onCreate()अपने लॉन्चर (मुख्य) गतिविधि के कार्य में यह कथन लिखें

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

यहां वह लेबल लिखें जो आप अपने लॉन्चर (मुख्य) गतिविधि को देना चाहते हैं।


0

आप ऐसा कुछ कर सकते हैं:

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

शीर्षक रखने के लिए आपको एक कस्टम लेआउट बनाना होगा। यह जितना सरल हो सकता है ( my_title.xmlइस मामले में कहा जाता है):

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

आपकी AndroidManifest.xmlफ़ाइल में आपको ऐप के लिए शीर्षक सेट करना होगा, जो कि लॉन्चर आइकन में दिखाया जाएगा। आपकी गतिविधि के लिए आपको वहां एक शीर्षक सेट करने की आवश्यकता नहीं है।


1
मुझे संदेह है कि यह वास्तव में सच है: एप्लिकेशन का लेबल वह नहीं है जो लॉन्चर लेबल को परिभाषित करता है-यह केवल परिभाषित करता है कि एप्लिकेशन को इंस्टॉल किए गए एप्लिकेशन की सूची में कैसे नाम दिया गया है (सेटिंग्स-> एप्लिकेशन-> एप्लिकेशन प्रबंधित करें) और यह लेबल एंड्रॉइड द्वारा भी लिया गया है बाजार भी। इसलिए मैं इसे बदलना नहीं चाहता। प्रयोग करके मुझे पता चला कि यह गतिविधि का शीर्षक है जिसे लांचर भी लेता है। इसके अलावा: आपके समाधान में एक कटोम शीर्षक शामिल है जो मुझे नहीं चाहिए! यह कभी भी डिफ़ॉल्ट टाइटल बार जैसा नहीं लगता - या मुझे डिफ़ॉल्ट व्यवहार पाने के लिए बहुत कुछ करना होगा- बिल्कुल भी अच्छा नहीं!
जोर्डिड

हम्म ... यह तो और भी बुरा है। मैंने सिर्फ आपके समाधान की कोशिश की। लेकिन, टाइटलबार बिल्कुल भी डिफ़ॉल्ट की तरह नहीं दिखता है और इससे भी बदतर, डिफ़ॉल्ट टाइटलबार (संक्षिप्त नाम जिसे मैं नहीं देखना चाहता हूं) दिखाते हुए कुछ समय पहले कस्टम टाइटलबार दिखाई देता है। इस प्रकार: यह समाधान केवल शीर्षक का उपयोग करके सेट करने के समान है setTitle। :-(
जोर्डिड

0

लॉन्चर वास्तव में एंड्रॉइड: लेबल और एंड्रॉइड: आइकन फॉर एक्टिविटी (ies) दिखाता है जो घोषित करता है

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

इसलिए एप्लिकेशन लेबल का कोई फायदा नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.