Làm cách nào để đặt nhãn khác nhau cho trình khởi chạy thay vì tiêu đề hoạt động?


269

Câu hỏi này đã được hỏi trước đây - nhưng không có câu trả lời thỏa mãn nào cả! Vì vậy, tôi đang thử lại.

Tôi muốn cung cấp cho biểu tượng trình khởi chạy ứng dụng của mình (biểu tượng được hiển thị trên màn hình bắt đầu!) Một chú thích khác, ngắn hơn. Có vẻ như trình khởi chạy lấy nhãn của nó từ phần chính nhất về nhãn của hoạt động chính, như ở đây:

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

Tôi đã thay đổi tham chiếu ban đầu thành tên ứng dụng @ string / app_name của tôi thành tài nguyên chuỗi ngắn hơn, khác ở đây.

NHƯNG - lớn NHƯNG : điều này cũng tất nhiên thay đổi tiêu đề mặc định của hoạt động này! Và tôi không muốn điều đó xảy ra, có đủ không gian cho một tên ứng dụng dài! Đặt lại tiêu đề dài khi onCreatesử dụng setTitle(int)phương thức cũng không tốt, bởi vì tên ngắn sẽ hiển thị cho người dùng trong một thời gian ngắn, nhưng đủ lâu để chú ý!

Và - xin đừng trả lời câu hỏi của tôi bằng cách tham khảo thanh tiêu đề tùy chỉnh ... Tôi không muốn đi xa như vậy, chỉ vì một tiêu đề chuỗi ngu ngốc! Thật khó để vẽ một thanh tiêu đề tùy chỉnh cho rất ít hiệu quả!

cách nào dễ dàng để chỉ cung cấp cho trình khởi chạy một chuỗi khác để hiển thị không? Cảm ơn câu trả lời của bạn!

Chỉnh sửa: Thêm một lý do tại sao có một thanh tiêu đề tùy chỉnh là một nỗi đau là nó sẽ không giống như thanh tiêu đề mặc định, tôi sẽ phải làm rõ ràng mọi thứ để làm cho nó trông giống nhau trên mỗi thiết bị! Và đó không thể là một giải pháp nếu sau tất cả, tôi không muốn có một diện mạo khác!

Câu trả lời:


470

Rõ ràng <intent-filter>có thể có một thuộc tính nhãn. Nếu nó vắng mặt, nhãn được kế thừa từ thành phần chính (Hoạt động hoặc Ứng dụng). Vì vậy, bằng cách này, bạn có thể đặt nhãn cho biểu tượng trình khởi chạy, trong khi vẫn có Hoạt động với tiêu đề riêng.

Lưu ý rằng, trong khi điều này hoạt động trên trình giả lập, nó có thể không hoạt động trên các thiết bị thực, bởi vì nó phụ thuộc vào việc triển khai trình khởi chạy được sử dụng.

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>

Lưu ý bên: <bộ lọc ý định> cũng có thể có thuộc tính biểu tượng, nhưng không hiểu sao nó không ghi đè biểu tượng được chỉ định trong Hoạt động. Điều này có thể quan trọng đối với bạn nếu bạn dự định sử dụng ActionBar gốc trong SDK 11+, sử dụng Biểu tượng và Logo được chỉ định trên Hoạt động.

Thông tin đã thêm: Nhãn đang được kế thừa từ Hoạt động chứ không phải Ứng dụng.

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

Trong trường hợp này, app_long_name sẽ được hiển thị với biểu tượng trình khởi chạy, nếu chúng ta không đặt nhãn bên trong như đã đề cập ở trên.


5
Trời ạ, thật tuyệt !! Tôi sẽ thử nó tối nay. Wow, tại sao một điều như vậy không được ghi lại đúng cách ?? !! Tôi biết lý do tại sao tôi không thích các cấu trúc XML kỳ lạ này ... ;-)
Zordid

13
Ồ không, ồ không. Thất vọng bây giờ. Các trình khởi chạy Android thuần túy (trên trình giả lập!) Thực sự làm những gì chúng ta đã thảo luận ở đây, nhưng ví dụ trình khởi chạy của HTC bỏ qua thẻ nhãn của ý định. :-( Thật ngu ngốc! Asus Eee Pad với Honeycomb cũng KHÔNG tuân thủ nhãn đó.
Zordid

2
Vì vậy, những gì bạn đang thấy là nhãn Hoạt động? Thật là sự xấu hổ. Tôi một nửa mong đợi rằng vì điều này không được ghi lại, bất kỳ ai viết launcher có thể sẽ không thực hiện đúng hành vi.
Đánh dấu Renouf

12
Hoạt động trên các phiên bản Gingerbread Nexus One, Nexus S cũng như "mới hơn" của tôi :-) Nhưng thật đáng buồn, vì sự không nhất quán mà tôi khuyên bạn không nên sử dụng. Tôi cũng có xu hướng cập nhật câu trả lời với một cảnh báo.
Đánh dấu Renouf

3
Tôi không biết tại sao trên trái đất này có rất nhiều upvote. Không phải mọi người kiểm tra mã của họ trên một thiết bị thực trước khi cho rằng một cái gì đó đang hoạt động? Giải pháp này, như đã nêu bởi những người khác, KHÔNG hoạt động trên một thiết bị thực. Tôi đã thử nghiệm trên 4 thiết bị (Android vani và không vanilla) và không có gì. Điều này chỉ hoạt động trên trình giả lập. Cách duy nhất tôi tìm thấy là sử dụng setTitle như được mô tả trong câu trả lời của Anila.
Tiago

35

Tôi đang tìm kiếm điều tương tự và đây là những gì làm việc cho tôi.

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

Điều này sẽ đặt một tên ngắn cho biểu tượng trình khởi chạy ứng dụng của bạn.

Để thêm tên lớn hơn vào thanh ứng dụng, bạn chỉ cần thêm:

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

vào tập tin java hoạt động chính của bạn.


Điều này hoạt động mà không thất bại nếu bạn cần thay đổi tiêu đề trên hoạt động launcher của bạn. Tuy nhiên, nó sẽ flash tên biểu tượng trong khoảng 1 giây.
rphello101

2
Nếu bạn không nhớ ứng dụng của mình hiển thị một thanh hành động trống một cách nhanh chóng (nghĩa là không có tiêu đề nào cả) thì bạn có thể thay đổi kiểu thanh hành động của mình và xóa showTitlekhỏi displayOptions. Sau đó, bạn có thể bật tiêu đề trong hoạt động onCreatenhư thế này: this.getActionBar (). SetDisplayOptions (ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); Điều này tốt hơn tên biểu tượng nhấp nháy, nhưng điều đó có nghĩa là mọi hoạt động trong ứng dụng của bạn sẽ phải bật tiêu đề nếu nó yêu cầu.
BruceHill

Điều này hoạt động mà không thất bại nếu bạn cần thay đổi tiêu đề trên hoạt động launcher của bạn.

Tại sao không setTitle(R.string.app_name);?
arekolek

10

Giải pháp của Mark Renouf không thành công với tôi (sử dụng Nexus 4 và Android 4.4). Không thành công khi sử dụng phím tắt, phím tắt sử dụng nhãn hoạt động chính thay vì tên ứng dụng. Tôi thấy một số ứng dụng như GMail và Google Keep hoạt động tốt. Nhưng khi bạn mở chúng, tôi nhận thấy nó giống như một khoảnh khắc giữa tiêu đề trống và tiêu đề xuất hiện (có vẻ tốt hơn tên ứng dụng nhấp nháy trước khi đặt tiêu đề bằng setTitle ()).

Vì vậy, đây là giải pháp tốt nhất tôi tìm thấy :

Tạo kiểu trong đó ActionBar không hiển thị tiêu đề / nhãn:

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

Tôi đang sử dụng ngăn kéo điều hướng và sử dụng logo (vì tôi sử dụng logo và biểu tượng cho ứng dụng của mình). Bạn có thể sử dụng bất cứ thứ gì nhưng không sử dụng showTitle . Sau đó, trong AndroidManifest.xml, đặt chủ đề cho 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>

Sau đó, trong phương thức onCreate () của MainActivity, hãy đặt tiêu đề của Thanh hành động của bạn:

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

Sau đó , bạn có thể gọi:

getActionBar().setDisplayShowTitleEnabled(true);

Lừa nhưng đáng.


4

Điều này có thể sẽ không thỏa mãn những gì bạn muốn làm, nhưng bạn có nghĩ đến việc tạo một màn hình giật gân hiển thị rất ngắn gọn (với tiêu đề mặc định) và sau đó khởi chạy hoạt động "chính" thực tế mới của bạn với tiêu đề bạn chọn bằng setTitle(int)phương pháp ? Tôi đã không thử điều này để xem nó có hoạt động không nhưng điều đó có thể tạo ra một tác phẩm thú vị xung quanh không thể hiện được bản chất kém liền mạch của những gì bạn đang cố gắng đạt được.


2

Đối với bất kỳ ai sử dụng Thanh công cụ Hỗ trợ / Ứng dụng thông qua setSupportActionBar()phương thức, tiêu đề Hoạt động có thể được đặt trong XML Thanh công cụ:

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

Điều này sẽ ghi đè nhãn ứng dụng và hoạt động được đặt trong tệp kê khai.

android.support.v7.widget.Toolbar


1

Tôi đã tìm thấy một cách giải quyết cho vấn đề này

Trong manifest.xml

Viết tên ứng dụng của bạn trong hoạt độngandroid:label của trình khởi chạy (chính) .

Điều này sẽ làm cho nhãn của hoạt động chính của bạn giống như nhãn của ứng dụng.

Sau đó, trong onCreate()chức năng của hoạt động Trình khởi chạy (chính) của bạn, hãy viết câu lệnh này

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

Ở đây viết nhãn mà bạn muốn cung cấp cho hoạt động Trình khởi chạy (chính) của bạn.


0

Bạn có thể làm một cái gì đó như thế này:

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

Bạn sẽ phải tạo một bố cục tùy chỉnh để giữ tiêu đề. Nó có thể đơn giản như (được gọi my_title.xmltrong trường hợp này):

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

Trong AndroidManifest.xmltệp của bạn, bạn chỉ cần đặt tiêu đề cho ứng dụng, đó là những gì sẽ được hiển thị trong biểu tượng trình khởi chạy. Đối với hoạt động của bạn, bạn không cần phải đặt tiêu đề ở đó.


1
Tôi nghi ngờ điều đó thực sự đúng: nhãn của ứng dụng không phải là định nghĩa nhãn launcher - nó chỉ định nghĩa cách ứng dụng được đặt tên trong danh sách các ứng dụng đã cài đặt (cài đặt-> ứng dụng-> quản lý ứng dụng) và nhãn này cũng được Android sử dụng Thị trường cũng vậy. Vì vậy, tôi không muốn thay đổi điều đó. Bằng cách thử nghiệm tôi cũng phát hiện ra đó là tiêu đề của hoạt động mà trình khởi chạy cũng vậy. Ngoài ra: giải pháp của bạn liên quan đến một tiêu đề dễ thương mà tôi không muốn! Điều này không bao giờ giống như thanh tiêu đề mặc định cả - hoặc tôi sẽ phải làm rất nhiều chỉ để có được hành vi mặc định - không tốt chút nào!
Zordid

Hmm ... nó thậm chí còn tồi tệ hơn. Tôi vừa thử giải pháp của bạn. Tuy nhiên, thanh tiêu đề hoàn toàn không giống mặc định và thậm chí tệ hơn, thanh tiêu đề mặc định (hiển thị tên ngắn mà tôi không muốn thấy) được hiển thị ngay trước khi thanh tiêu đề tùy chỉnh xuất hiện. Do đó: giải pháp này giống như chỉ đặt tiêu đề bằng cách sử dụng setTitle. :-(
Zordid

0

Trình khởi chạy thực sự hiển thị android: nhãn và android: icon cho hoạt động (ies) khai báo

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

vì vậy nhãn ứng dụng là không sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.