سؤال

تم طرح هذا السؤال من قبل - ولكن بدون إجابة مرضية على الإطلاق! لذلك أنا أحاول ذلك مرة أخرى.

أرغب في إعطاء أيقونة مشغل التطبيق الخاصة بي (تلك التي يتم عرضها على شاشة البدء!) تعليق أقصر مختلف. يبدو أن المشغل يأخذ ملصقه من قسم MainFest حول ملصق النشاط الرئيسي ، كما هو الحال هنا:

<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) الطريقة لا جيدة أيضًا ، لأن الاسم القصير سيكون مرئيًا للمستخدم لفترة قصيرة ، ولكن لفترة طويلة بما يكفي لتلاحظ!

و - من فضلك لا تجيب على سؤالي من خلال الرجوع إلى شريط عنوان مخصص ... لا أريد أن أقطع شوطًا طويلًا ، لمجرد عنوان سلسلة غبية! إنه لألم أن يرسم شريط عنوان مخصص للتأثير القليل جدًا!

هل هناك لا طريقة سهلة فقط لإعطاء المشغل سلسلة مختلفة لعرضها؟ شكرا لإجاباتك!

يحرر: أحد الأسباب التي تجعل الحصول على شريط عنوان مخصص هو الألم هو أنه لن يبدو وكأنه شريط العنوان الافتراضي ، فسيتعين عليّ القيام بالأشياء بشكل صريح لجعله يبدو متشابهًا على كل جهاز! وهذا لا يمكن أن يكون حلاً إذا ، بعد كل شيء ، لا أريد مظهرًا مختلفًا!

هل كانت مفيدة؟

المحلول

فيما يبدو <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>

ملاحظة جانبية:u003Cintent-filter> يمكن أن يكون لديك أيضًا سمة أيقونة ، ولكن بشكل غير مفهوم يفعل ذلك ليس تجاوز الرمز المحدد في النشاط. قد يكون هذا أمرًا مهمًا بالنسبة لك إذا كنت تخطط لاستخدام شريط الحركة الأصلي في SDK 11+ ، والذي يستخدم الرمز والشعار المحدد على النشاط.

معلومات إضافية: يتم توريث الملصق من النشاط وليس التطبيق.

 <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 باستخدام أيقونة قاذفة ، إذا لم نضع التسمية في الداخل كما هو مذكور أعلاه.

نصائح أخرى

كنت أبحث عن نفس الشيء وهنا ما نجح بالنسبة لي.

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

إلى ملف النشاط الرئيسي Java.

فشل حل Mark Renouf (باستخدام Nexus 4 و Android 4.4). يفشل عند استخدام الاختصارات ، تستخدم الاختصارات تسمية النشاط الرئيسية بدلاً من اسم التطبيق. لقد رأيت بعض التطبيقات مثل Gmail و Google Keep بشكل جيد. ولكن عندما تفتحها ، لاحظت أن لحظة بين العنوان فارغة ويبدو أن العنوان يظهر (والذي يبدو أفضل من اسم التطبيق قبل تعيين العنوان باستخدام Settitle ()).

إذن ها هو أفضل حل وجدته:

قم بإنشاء نمط لا يعرض فيه 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 ، قم بتعيين موضوع النشاط الرئيسي:

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

ثم ، في طريقة onCreate () للنشاط الرئيسي ، قم بتعيين عنوان شريط الإجراء الخاص بك:

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

بعد ذلك, ، تستطيع الاتصال:

getActionBar().setDisplayShowTitleEnabled(true);

صعب ولكن يستحق.

ربما لن يرضي هذا ما تريد القيام به ، ولكن هل فكرت في إنشاء شاشة دفقة تعرض بإيجاز شديد (مع العنوان الافتراضي) ثم تطلق نشاطك "الرئيسي" الجديد مع عنوان اختيارك باستخدام setTitle(int) طريقة؟ لم أحاول هذا لمعرفة ما إذا كان ذلك يعمل ، لكن هذا قد يخلق عملًا ممتعًا لا يظهر للطبيعة الأقل سلاسة لما تحاول تحقيقه.

لأي شخص يستخدم دعم / appcompat شريط الأدوات عبر setSupportActionBar() الطريقة ، يمكن تعيين عنوان النشاط في شريط الأدوات XML:

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

سيؤدي ذلك إلى تجاوز تسميات التطبيق والنشاط في البيان.

Android.support.v7.widget.toolbar

لقد وجدت حلًا عن هذه المشكلة

في manifest.xml

اكتب اسم التطبيق في ال android:label التابع النشاط القاذف (الرئيسي).

هذا سيجعل تسمية نشاطك الرئيسي مثل علامة التطبيق.

ثم ، في onCreate() وظيفة الخاص بك النشاط القاذف (الرئيسي) اكتب هذا البيان

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

هنا اكتب التسمية التي تريد تقديمها لنشاط المشغل (الرئيسي).

يمكنك أن تفعل شيئًا كهذا:

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 الملف الذي عليك فقط تعيين عنوان التطبيق ، وهو ما سيظهر في أيقونة Launcher. لنشاطك ، لا تحتاج إلى تعيين عنوان هناك.

يعرض المشغل فعليًا Android: Label و Android: أيقونة للنشاط (IES) الذي يعلن

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

لذلك تسمية التطبيق لا فائدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top