Как изменить текст на панели действий


230

В настоящее время он просто отображает название приложения, и я хочу, чтобы оно отображало что-то свое и отличалось для каждого экрана в моем приложении.

Например: мой домашний экран может показывать «page1» на панели действий, в то время как другое действие, на которое переключается приложение, может иметь «page2» на этой панели действий экранов.

Ответы:


358

Обновление: последний шаблон ActionBar (заголовок):

К вашему сведению, ActionBar был представлен на уровне API 11. ActionBar - это оконная функция в верхней части действия, которая может отображать заголовок действия , режимы навигации и другие интерактивные элементы, такие как поиск.

Я точно помню, как настроить строку заголовка и сделать ее согласованной с помощью приложения. Поэтому я могу сравнить с предыдущими днями и перечислить некоторые преимущества использования ActionBar:

  1. Он предлагает вашим пользователям знакомый интерфейс между приложениями, который система изящно адаптирует для различных конфигураций экрана.
  2. Разработчикам не нужно писать много кода для отображения заголовка действия, значков и режимов навигации, потому что ActionBar уже готов с абстракцией верхнего уровня.

Например:

введите описание изображения здесь

введите описание изображения здесь

=> Нормальный способ,

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

=> Настройка панели действий,

Например:

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

}

Стилизация панели действий:

Панель ActionBar предоставляет вам простой и привычный внешний вид, режимы навигации и другие быстрые действия. Но это не значит, что он выглядит одинаково в каждом приложении. Вы можете настроить его в соответствии с вашим пользовательским интерфейсом и требованиями к дизайну. Вы просто должны определить и написать стили и темы.

Узнайте больше на странице : Стиль панели действий

И если вы хотите сгенерировать стили для ActionBar, вам поможет этот инструмент Style Generator .

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

Старый: Ранние дни:

=> Нормальный способ,

Вы можете изменить заголовок каждого экрана (например, активность), установив их Android:label

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

=> Пользовательский - заголовок - строка


Но если вы хотите настроить строку заголовка по-своему, то есть Want to put Image icon and custom-text, следующий код работает для меня:

main.xml

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

titlebar.xml

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

strings.xml

Файл strings.xml определяется в valuesпапке.

<?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
Следуйте этому примеру, чтобы установить пользовательский заголовок в Android для действия или глобально для всего приложения: labs.makemachine.net/2010/03/custom-android-window-title
Paresh Mayani

1
+1! спасибо за это, но не могли бы вы сказать, почему андроид: layout_width = "400px", родительский линейный макет?
quinestor

2
@quinestor да, вы можете использовать "wrap_content" или "fill_parent", если хотите, это только для примера.
Пареш Майани

Некоторые намеки на JavaScript?
плющ

1
Я бы не стал использовать «px» вместо независимых модулей, таких как «dp», потому что многие новые учащиеся узнают гораздо больше, чем просто ответ, пытаясь разбить код и извлечь из него максимум пользы.
Акшат Агарвал

107

Вы можете определить метку для каждого действия в файле манифеста.

Нормальное определение деятельности выглядит так:

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

Где текст заголовка должен быть заменен идентификатором строкового ресурса для этого действия.

Вы также можете установить текст заголовка из кода, если вы хотите установить его динамически.

setTitle(address.getCity());

с помощью этой строки заголовок устанавливается для города определенного адреса в методе oncreate моей деятельности.


56

Вы можете определить свой заголовок программно, используя setTitleвнутри вашего Activity, этот метод может принять Stringили идентификатор, определенный в вашем values/strings.xmlфайле. Пример:

public class YourActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

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

    }
}

19

Мы можем изменить заголовок ActionBar одним из двух способов:

  1. В Манифесте: в файле манифеста установите метку каждого действия.

    android:label="@string/TitleWhichYouWantToDisplay"
  2. В коде: в коде вызовите метод setTitle () с аргументом String или id String.

    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

Внутри обратного вызова Activity.onCreate () или в другом месте, где вам нужно изменить заголовок:

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

5

попробуйте сделать это ...

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

меня устраивает


3

Немного старше, но с той же проблемой. Я сделал это так:

strings.xml

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

и убедитесь, что вы установили это в вашем AndroidManifest.xml :

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

это легко, и вам не нужно беспокоиться о нулевых ссылках и прочем.



3

Самый простой способ изменить имя панели действий - перейти на AndroidManifest.xml и ввести этот код.

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

2

Вы просто добавляете этот код в onCreateметод.

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

Для получения дополнительной информации проверьте эту ссылку:

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


Вы можете использовать getSupportActionBar (), если вы используете AppCompatActivity
Хамид Вакилиан

1

Лучший способ изменить имя панели действий - перейти на AndroidManifest.xml и ввести этот код.

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

1

Котлин

Вы можете сделать это программно в Kotlin таким образом. Вы просто игнорируете это, если "supportActionBar" является нулем :

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

Или вот так. Выдает исключение, если "supportActionBar" равно нулю.

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

0

Самый простой способ - позвонить, this.setTitle("...")если вы находитесь в игре. А если вы во фрагменте, просто позвоните getActivity().setTitle("...");

Этот способ позволит вам изменить заголовок в любое время, не нужно вызывать его раньше setContentView(R.layout.activity_test);


0

Для будущих разработчиков, которые используют AndroidX и архитектурный компонент навигации .

Вместо того чтобы устанавливать заголовок панели инструментов с помощью одного из приведенных выше решений, что может быть очень болезненным, если вы хотите установить его динамически при изменении заднего стека, вы можете установить заполнитель для заголовка фрагмента на графике навигации, как показано ниже:

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

Значение заполнителя должно быть предоставлено с помощью FragmentDirections(через метод действия).

Затем его заменяют в заголовке и показывают как Hello World(когда placeholder = "World").


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.