Cách thay đổi văn bản trên thanh hành động


230

Hiện tại nó chỉ hiển thị tên của ứng dụng và tôi muốn nó hiển thị một cái gì đó tùy chỉnh và khác nhau cho mỗi màn hình trong ứng dụng của tôi.

Ví dụ: màn hình chính của tôi có thể nói 'page1' trong thanh hành động trong khi một hoạt động khác mà ứng dụng chuyển sang có thể có 'page2' trong thanh hành động màn hình đó.

Câu trả lời:


358

Cập nhật: Mẫu ActionBar (Tiêu đề) mới nhất:

FYI, ActionBar đã được giới thiệu trong API Cấp 11. ActionBar là một tính năng cửa sổ ở đầu Hoạt động có thể hiển thị tiêu đề hoạt động , chế độ điều hướng và các mục tương tác khác như tìm kiếm.

Tôi nhớ chính xác về việc tùy chỉnh thanh tiêu đề và làm cho nó phù hợp thông qua ứng dụng. Vì vậy, tôi có thể so sánh với những ngày trước và có thể liệt kê một số ưu điểm của việc sử dụng ActionBar:

  1. Nó cung cấp cho người dùng của bạn một giao diện quen thuộc trên các ứng dụng mà hệ thống thích ứng một cách duyên dáng cho các cấu hình màn hình khác nhau.
  2. Các nhà phát triển không cần phải viết nhiều mã để hiển thị Tiêu đề hoạt động, biểu tượng và chế độ điều hướng vì ActionBar đã sẵn sàng với tính trừu tượng cấp cao nhất.

Ví dụ:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

=> Cách thông thường,

getActionBar().setTitle("Hello world App");   
getSupportActionBar().setTitle("Hello world App");  // provide compatibility to all the versions

=> Tùy chỉnh thanh hành động,

Ví dụ:

@Override
public void setActionBar(String heading) {
    // TODO Auto-generated method stub

    com.actionbarsherlock.app.ActionBar actionBar = getSupportActionBar();
    actionBar.setHomeButtonEnabled(true);
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.title_bar_gray)));
    actionBar.setTitle(heading);
    actionBar.show();

}

Tạo kiểu cho Action Bar:

ActionBar cung cấp cho bạn giao diện cơ bản và quen thuộc, các chế độ điều hướng và các hành động nhanh khác để thực hiện. Nhưng điều đó không có nghĩa là nó trông giống nhau trong mọi ứng dụng. Bạn có thể tùy chỉnh nó theo yêu cầu UI và thiết kế của bạn. Bạn chỉ cần xác định và viết phong cách và chủ đề.

Đọc thêm tại: Tạo kiểu cho Action Bar

Và nếu bạn muốn tạo phong cách cho ActionBar thì đây Phong cách Generator công cụ có thể giúp bạn ra ngoài.

================================================== ===============================

Cũ: Ngày trước:

=> Cách thông thường,

bạn có thể Thay đổi Tiêu đề của từng màn hình (tức là Hoạt động) bằng cách đặt Android:label

   <activity android:name=".Hello_World"
                  android:label="This is the Hello World Application">
   </activity>

=> Tùy chỉnh - Tiêu đề - thanh


Nhưng nếu bạn muốn Tùy chỉnh thanh tiêu đề theo cách riêng của mình, nghĩa là Want to put Image icon and custom-text, đoạn mã sau hoạt động với tôi:

tệp chính

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

tiêu đề

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="400dp" 
  android:layout_height="fill_parent"
  android:orientation="horizontal">

<ImageView android:id="@+id/ImageView01" 
            android:layout_width="57dp" 
            android:layout_height="wrap_content"
            android:background="@drawable/icon1"/>

<TextView 

  android:id="@+id/myTitle" 
  android:text="This is my new title" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:textColor="@color/titletextcolor"
   />
</LinearLayout>

TitleBar.java

public class TitleBar extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final boolean customTitleSupported = 
                requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        if (customTitleSupported) {
            getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
                R.layout.titlebar);
        }
        final TextView myTitleText = (TextView) findViewById(R.id.myTitle);
        if (myTitleText != null) {
            myTitleText.setText("NEW TITLE");
            // user can also set color using "Color" and then
            // "Color value constant"
            // myTitleText.setBackgroundColor(Color.GREEN);
        }
    }
}

chuỗi DOM

Tệp String.xml được định nghĩa trong valuesthư mục.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, Set_Text_TitleBar!</string>
    <string name="app_name">Set_Text_TitleBar</string>
    <color name="titlebackgroundcolor">#3232CD</color>
    <color name="titletextcolor">#FFFF00</color>
</resources>

2
Thực hiện theo ví dụ này để đặt Tiêu đề tùy chỉnh trong Android cho một hoạt động hoặc toàn cầu cho toàn bộ ứng dụng: labs.makemachine.net/2010/03/custom-android-window-title
Paresh Mayani

1
+1! cảm ơn vì điều này, nhưng bạn có thể cho biết lý do tại sao android: layout_creen = "400px", với bố cục tuyến tính cha mẹ không?
quinestor

2
@quinestor có, bạn có thể sử dụng "quấn_content" hoặc "fill_parent" nếu bạn muốn, đây chỉ là ví dụ.
Paresh Mayani

Một số gợi ý cho javascript?
ivy

1
Tôi sẽ chống lại việc sử dụng "px" thay vì các đơn vị độc lập như "dp" bởi vì nhiều người học mới học được nhiều thứ hơn là những gì đã được trả lời bằng cách cố gắng phá vỡ mã và tận dụng tối đa nó.
Akshat Agarwal

107

Bạn có thể xác định nhãn cho từng hoạt động trong tệp kê khai của mình.

Một định nghĩa bình thường của một hoạt động trông như thế này:

<activity
     android:name=".ui.myactivity"
     android:label="@string/Title Text" />

Trường hợp văn bản tiêu đề nên được thay thế bằng id của tài nguyên chuỗi cho hoạt động này.

Bạn cũng có thể đặt văn bản tiêu đề từ mã nếu bạn muốn đặt nó một cách linh hoạt.

setTitle(address.getCity());

với dòng này, tiêu đề được đặt cho thành phố của một địa chỉ cụ thể trong phương thức hoạt động của tôi.


56

Bạn có thể xác định tiêu đề của mình theo chương trình bằng cách sử dụng setTitlebên trong Activity, phương pháp này có thể chấp nhận một Stringhoặc một ID được xác định trong values/strings.xmltệp của bạn . Thí dụ:

public class YourActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        setTitle(R.string.your_title);
        setContentView(R.layout.main);

    }
}

19

Chúng tôi có thể thay đổi tiêu đề ActionBar theo một trong hai cách:

  1. Trong Bản kê khai: trong tệp kê khai, đặt nhãn của từng Hoạt động.

    android:label="@string/TitleWhichYouWantToDisplay"
  2. Trong mã: trong mã, gọi phương thức setTitle () với Chuỗi hoặc id của Chuỗi làm đối số.

    public class MainActivity extends Activity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
    
            setTitle(R.string.TitleWhichYouWantToDisplay);
            // OR You can also use the line below
            // setTitle("MyTitle")
            setContentView(R.layout.activity_main);
    
        }
    }

16

Bên trong gọi lại Activity.onCreate () hoặc ở một nơi khác mà bạn cần thay đổi tiêu đề:

getSupportActionBar().setTitle("Whatever title");

5

hãy thử làm điều này ...

public void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
    this.setTitle(String.format(your_format_string, your_personal_text_to_display));
    setContentView(R.layout.your_layout);
       ...
       ...
}

nó làm việc cho tôi


3

Lớn hơn một chút nhưng có cùng một vấn đề. Tôi đã làm nó như thế này:

chuỗi DOM

<string name="title_awesome_app">My Awesome App</string>

và đảm bảo rằng bạn đã đặt cái này trong AndroidManifest.xml :

<activity
            ...
            android:label="@string/title_awesome_app" >
            ...
</activity>

thật dễ dàng và bạn không phải lo lắng về tài liệu tham khảo null và những thứ khác.



3

Cách dễ nhất để thay đổi tên thanh hành động là truy cập AndroidManifest.xml và nhập mã này.

<activity android:name=".MainActivity"
    android:label="Your Label> </activity>

2

Bạn chỉ cần thêm mã này trong onCreatephương thức.

setTitle("new title");

1
ActionBar ab = getActionBar();
TextView tv = new TextView(getApplicationContext());

LayoutParams lp = new RelativeLayout.LayoutParams(
        LayoutParams.MATCH_PARENT, // Width of TextView
        LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(lp);
tv.setTextColor(Color.RED);
ab.setCustomView(tv);

Để biết thêm thông tin kiểm tra liên kết này:

http://android--code.blogspot.in/2015/09/android-how-to-change-actionbar-title_21.html


Bạn có thể sử dụng getSupportActionBar () nếu bạn đang sử dụng AppCompatActivity
Hamid Vakilian

1

Cách tốt nhất để thay đổi tên thanh hành động là truy cập AndroidManifest.xml và nhập mã này.

<activity android:name=".YourActivity"
        android:label="NameYouWantToDisplay> </activity>

1

Kotlin

Bạn có thể làm điều đó theo lập trình trong Kotlin theo cách này. Bạn chỉ cần bỏ qua nó nếu "supportActionBar" là null :

    supportActionBar?.setTitle(R.string.my_text)
    supportActionBar?.title = "My text"

Hoặc theo cách này. Nó ném một ngoại lệ nếu "supportActionBar" là null.

    supportActionBar!!.setTitle(R.string.my_text)
    supportActionBar!!.title = "My text"

0

Cách dễ nhất là gọi this.setTitle("...")nếu bạn đang trong hoạt động. Và nếu bạn đang ở trong một mảnh, chỉ cần gọi getActivity().setTitle("...");

Cách này sẽ cho phép bạn thay đổi tiêu đề bất cứ lúc nào, không cần phải gọi nó trước đó setContentView(R.layout.activity_test);


0

Dành cho các nhà phát triển trong tương lai đang sử dụng AndroidXthành phần kiến ​​trúc điều hướng .

Thay vì đặt tiêu đề thanh công cụ bằng một trong các giải pháp ở trên, điều này có thể rất khó khăn nếu bạn muốn đặt nó một cách linh hoạt khi thay đổi ngăn xếp phía sau, bạn có thể đặt một trình giữ chỗ cho tiêu đề của đoạn trong biểu đồ điều hướng như sau:

<fragment
    android:id="@+id/some_fragment"
    android:name="package.SomeFragment"
    android:label="Hello {placeholder}"
    tools:layout="@layout/fragment_some">
    <argument
        android:name="placeholder"
        app:argType="string" />
</fragment>

Giá trị giữ chỗ phải được cung cấp bằng cách sử dụng FragmentDirections(thông qua phương thức hành động).

Sau đó, nó được thay thế trong tiêu đề và hiển thị như Hello World(khi placeholder = "World").


0

getSupportActionBar().setTitle("title");


Câu trả lời chỉ có mã là câu trả lời chất lượng thấp. Thêm một số giải thích cho lý do tại sao điều này hoạt động.
TASlim Oseni
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.