ক্রিয়াকলাপ শিরোনামের চেয়ে লঞ্চারের জন্য আলাদা লেবেল কীভাবে সেট করবেন?


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>

আমি ইতিমধ্যে আমার অ্যাপ্লিকেশানের নামের @ স্ট্রিং / অ্যাপ_নামের মূল রেফারেন্সটি এখানে আলাদা, সংক্ষিপ্ত স্ট্রিং রিসোর্সে পরিবর্তন করেছি।

বাট - বিগ বিট : এটি অবশ্যই এই ক্রিয়াকলাপের ডিফল্ট শিরোনাম পরিবর্তন করে! এবং আমি এটি হতে চাইনি, দীর্ঘ অ্যাপ্লিকেশন নামের জন্য যথেষ্ট জায়গা আছে! পদ্ধতিটি 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+ এর নেটিভ অ্যাকশনবার ব্যবহার করার পরিকল্পনা করেন তবে এটি আপনার জন্য গুরুত্বপূর্ণ হতে পারে, যা ক্রিয়াকলাপে নির্দিষ্ট আইকন এবং লোগো ব্যবহার করে।

সংযুক্ত তথ্য: অ্যাপ্লিকেশনটি নয় বরং ক্রিয়াকলাপ থেকে লেবেল উত্তরাধিকার সূত্রে প্রাপ্ত হচ্ছে।

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

এই ক্ষেত্রে, আমরা উপরে উল্লিখিত হিসাবে লেবেলটি ভিতরে না রাখলে অ্যাপ_লং_নামটি লঞ্চার আইকন সহ প্রদর্শিত হবে।


5
জি, দারুণ !! আমি আজ রাতে চেষ্টা করব। বাহ, কেন এমন জিনিস সঠিকভাবে নথিভুক্ত হয় না ?? !! আমি জানি কেন আমি এই অদ্ভুত এক্সএমএল কাঠামো পছন্দ করি না ... ;-)
জোর্ডিড

13
ওহ না, ওহ না। হতাশ এখন। খাঁটি অ্যান্ড্রয়েড লঞ্চার (এমুলেটরগুলিতে!) আমরা এখানে যা আলোচনা করেছি তা সত্যিই তা করে তবে উদাহরণস্বরূপ, এইচটিসির লঞ্চারটি অভিপ্রায়টির লেবেল ট্যাগটিকে উপেক্ষা করে। :-( কত বোকা! হানিকম্বের সাথে আসুস
আই প্যাডও

2
তাহলে আপনি যা দেখছেন তা হল কার্যকলাপের লেবেল? এটা লজ্জার. আমি অর্ধেক প্রত্যাশা করেছি যেহেতু এটি নথিভুক্ত নয়, যে কেউ প্রবর্তক লিখছেন সম্ভবত সঠিক আচরণটি প্রয়োগ করবেন না।
মার্ক রেনুফ

12
আমার জিঞ্জারব্রেড নেক্সাস ওয়ান, নেক্সাস এস-তে পাশাপাশি "আরও নতুন" প্রকাশিতগুলিতে কাজ করে :-) তবে দুঃখের বিষয়, আমি এই ব্যবহার না করার পরামর্শ দেব the আমি উত্তরটি আপডেট করার সাথে সাথে একটি সতর্কতাও বোধ করি।
মার্ক রেনৌফ

3
পৃথিবীতে কেন এতো বেশি উত্সাহ রয়েছে তা আমার কোনও ধারণা নেই। লোকেরা কোনও কাজ করছে বলে ধরে নেওয়ার আগে তাদের আসল ডিভাইসে প্রথমে তাদের কোডটি পরীক্ষা করে না? এই সমাধানটি যেমন অন্যদের দ্বারা বলা হয়েছে, কোনও আসল ডিভাইসে কাজ করে না। আমি ৪ টি ডিভাইস (ভ্যানিলা এবং নন-ভ্যানিলা অ্যান্ড্রয়েড) এবং কিছুতেই পরীক্ষা করেছি। এটি কেবল এমুলেটরটিতে কাজ করে। আমি খুঁজে পেলাম একমাত্র উপায় হ'ল অনিলার উত্তরে বর্ণিত সেটটাইটেলটি ব্যবহার করা।
টিয়াগো

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
যদি আপনার অ্যাপটি সংক্ষেপে একটি ফাঁকা অ্যাকশনবার দেখায় তাতে আপত্তি না জানায় (অর্থাত্ কোনও শিরোনাম নেই) তবে আপনি নিজের অ্যাকশনবারের স্টাইলটি পরিবর্তন করতে এবং showTitleএটি থেকে সরিয়ে ফেলতে পারেন displayOptions। তারপরে আপনি এই ক্রিয়াকলাপে শিরোনামটি চালু করতে পারেন onCreate: this.getActionBar () .SsetDisplayOptions (অ্যাকশনবার.আইডিআইএলএসএলএসএইচএইচ_হাউম | অ্যাকশনবার।আইডিআইএল_এসএইচএইউআরডিএল); এটি আইকন নেভিগেশন ফ্ল্যাশিংয়ের চেয়ে ভাল, তবে এর অর্থ এই নয় যে আপনার অ্যাপ্লিকেশনের প্রতিটি ক্রিয়াকলাপের প্রয়োজন হলে শিরোনামটি চালু করতে হবে।
ব্রুসহিল

আপনার লঞ্চার ক্রিয়াকলাপের শিরোনাম পরিবর্তন করতে হলে এটি ব্যর্থ হয়ে কাজ করে।

না কেন setTitle(R.string.app_name);?
arekolek

10

মার্ক রেনোফের সমাধান আমার কাছে ব্যর্থ (নেক্সাস 4 এবং অ্যান্ড্রয়েড 4.4 ব্যবহার করে)। শর্টকাটগুলি ব্যবহার করার সময় এটি ব্যর্থ হয়, শর্টকাটগুলি অ্যাপের নামের পরিবর্তে প্রধান ক্রিয়াকলাপ লেবেল ব্যবহার করে। আমি GMail এবং গুগল কিপ এর মতো কিছু অ্যাপ্লিকেশন দেখেছি যা ভাল কাজ করে। তবে আপনি যখন এগুলি খুলুন, আমি লক্ষ্য করি শিরোনামটি ফাঁকা এবং শিরোনামের মাঝে একটি মুহুর্তের মতো লাগে (যা সেটটিটল ()) ব্যবহার করে শিরোনাম সেট করার আগে অ্যাপ্লিকেশন নামের ফ্ল্যাশিংয়ের চেয়ে ভাল বলে মনে হয়।

সুতরাং আমি খুঁজে পাওয়া সেরা সমাধান এখানে :

এমন একটি শৈলী তৈরি করুন যেখানে অ্যাকশনবার শিরোনাম / লেবেলটি দেখায় না:

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

আমি একটি নেভিগেশন ড্রয়ার এবং একটি লোগো ব্যবহার করছি (কারণ আমি আমার অ্যাপ্লিকেশনের জন্য লোগো এবং একটি আইকন ব্যবহার করি)। আপনি শো টাইটেল ব্যবহার না করে যা কিছু ব্যবহার করতে পারেন । তারপরে অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল এ, মেইনএ্যাকটিভিটির জন্য থিমটি সেট করুন:

<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

পদ্ধতির মাধ্যমে সাপোর্ট / অ্যাপকম্প্যাট সরঞ্জামদণ্ড যে কারও জন্য setSupportActionBar(), ক্রিয়াকলাপ শিরোনামটি সরঞ্জামদণ্ডে এক্সএমএল সেট করা যেতে পারে:

<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

প্রবর্তক আসলে অ্যান্ড্রয়েড: লেবেল এবং অ্যান্ড্রয়েড দেখায়: ক্রিয়াকলাপের আইকন (আইএস) যা ঘোষণা করে

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

সুতরাং অ্যাপ্লিকেশন লেবেলের কোনও ব্যবহার নেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.