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

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

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

20 ответов

Решение

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

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

Я точно помню, как настроить строку заголовка и сделать ее согласованной с помощью приложения. Поэтому я могу сравнить с предыдущими днями и перечислить некоторые преимущества использования 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, этот инструмент Generator Style может вам помочь.

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

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

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

Вы можете изменить заголовок каждого экрана (например, активность), установив их 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>

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

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

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

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

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

setTitle(address.getCity());

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

Вы можете определить свой заголовок программно, используя 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);

    }
}

Мы можем изменить заголовок 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);
    
        }
    }
    

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

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

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

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

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

Котлин

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

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

Или так. Он выдает исключение, если supportActionBar имеет значение null.

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

Приведенный ниже код хорошо работал для меня внутри метода Oncreate.

          getSupportActionBar().setTitle("Text to display");

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

strings.xml

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

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

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

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

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

setTitle("new title");

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

<activity android:name=".MainActivity"
    android:label="Your Label> </activity>
getActionBar().setTitle("edit your text"); 
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

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

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

getSupportActionBar().setTitle("title");

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

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

В onCreateView добавьте это:

(activity as AppCompatActivity).supportActionBar?.title ="My APP Title"

При использовании фрагмента лучший способ — просто добавить элемент метки внутриfragment.xml(не проявляется)

Пример:

      android:label="Your text.."

Для будущих разработчиков, которые используют 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").

Если вы используете панель навигации для изменения фрагмента, вы можете добавить его, где ur меняет фрагмент, как показано ниже:

 public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.clientsidedrawer:
                    //    Toast.makeText(getApplicationContext(),"Client selected",Toast.LENGTH_SHORT).show();
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new clients_fragment()).commit();
                    break;
    
                case R.id.adddatasidedrawer:
                    getSupportActionBar().setTitle("Add Client");
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new addclient_fragment()).commit();
                    break;
    
                case R.id.editid:
                    getSupportActionBar().setTitle("Edit Clients");
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new Editclient()).commit();
                    break;
    
                case R.id.taskid:
                    getSupportActionBar().setTitle("Task manager");
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new Taskmanager()).commit();
                    break;

если вы используете простое действие, просто позвоните:

getSupportActionBar().setTitle("Contact Us");

для изменения цвета панели действий / панели инструментов в действии используйте:

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#06023b")));

чтобы установить градиент на панель действий, сначала создайте градиент: Пример создания директории> R.drawable.gradient_contactus

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >

    <gradient
        android:angle="90"
        android:startColor="#2980b9"
        android:centerColor="#6dd5fa"
        android:endColor="#2980b9">
    </gradient>


</shape>

а затем установите его так:

getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.gradient_contactus));
Другие вопросы по тегам