Como alterar o texto na barra de ação

230

Atualmente, ele apenas exibe o nome do aplicativo e eu quero que ele exiba algo personalizado e seja diferente para cada tela no meu aplicativo.

Por exemplo: minha tela inicial pode dizer 'página1' na barra de ação, enquanto outra atividade para a qual o aplicativo alterna pode ter 'página2' nessa barra de ação da tela.

maçaneta
fonte

Respostas:

358

Atualização: Padrão mais recente do ActionBar (Título):

Para sua informação, o ActionBar foi introduzido na API Nível 11. O ActionBar é um recurso da janela na parte superior da Atividade que pode exibir o título da atividade , modos de navegação e outros itens interativos, como pesquisa.

Lembro-me exatamente de como personalizar a barra de título e torná-la consistente através do aplicativo. Para que eu possa fazer uma comparação com os dias anteriores e listar algumas das vantagens de usar o ActionBar:

  1. Ele oferece aos usuários uma interface familiar entre aplicativos que o sistema adapta normalmente para diferentes configurações de tela.
  2. Os desenvolvedores não precisam escrever muito código para exibir o título da atividade, os ícones e os modos de navegação porque o ActionBar já está pronto com a abstração de nível superior.

Por exemplo:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

=> Maneira normal,

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

=> Personalizando a barra de ação,

Por exemplo:

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

}

Estilo da barra de ação:

A ActionBar fornece visões básicas e familiares, modos de navegação e outras ações rápidas para executar. Mas isso não significa que parece o mesmo em todos os aplicativos. Você pode personalizá-lo conforme sua interface do usuário e requisitos de design. Você apenas precisa definir e escrever estilos e temas.

Leia mais em: Modelando a barra de ação

E se você deseja gerar estilos para o ActionBar, esta ferramenta de Gerador de estilos pode ajudá-lo.

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

Antigos: Dias anteriores:

=> Maneira normal,

você pode alterar o título de cada tela (ou seja, atividade) definindo suas Android:label

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

=> Personalizado - Título - barra


Mas se você deseja personalizar a barra de título à sua maneira, ou seja Want to put Image icon and custom-text, o código a seguir funciona para mim:

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

O arquivo strings.xml é definido na valuespasta

<?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>
Paresh Mayani
fonte
2
Siga este exemplo para definir Título personalizado no android para uma atividade ou globalmente para todo aplicativo: labs.makemachine.net/2010/03/custom-android-window-title
Paresh Mayani
1
+1! obrigado por isso, mas você poderia dizer por que o android: layout_width = "400px", para o layout linear pai?
quinestor 18/12/12
2
@quinestor sim, você pode usar "wrap_content" ou "fill_parent" se quiser, isso é apenas por exemplo.
Paresh Mayani
Algumas dicas para javascript?
Ivy #
1
Eu seria contra o uso de "px" em vez de unidades independentes como "dp", porque muitos alunos novos aprendem muito mais do que apenas o que foi respondido, tentando quebrar o código e tirar o máximo proveito dele.
Akshat Agarwal
107

Você pode definir o rótulo para cada atividade no seu arquivo de manifesto.

Uma definição normal de uma atividade é semelhante a esta:

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

Onde o texto do título deve ser substituído pelo ID de um recurso de sequência para esta atividade.

Você também pode definir o texto do título a partir do código, se desejar defini-lo dinamicamente.

setTitle(address.getCity());

com esta linha, o título é definido como a cidade de um endereço específico no método oncreate da minha atividade.

Janusz
fonte
56

Você pode definir seu título programaticamente usando setTitledentro de seu Activity, este método pode aceitar um Stringou um ID definido em seu values/strings.xmlarquivo. Exemplo:

public class YourActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

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

    }
}
não voltar
fonte
19

Podemos alterar o título do ActionBar de duas maneiras:

  1. No manifesto: no arquivo de manifesto, defina o rótulo de cada atividade.

    android:label="@string/TitleWhichYouWantToDisplay"
  2. No código: no código, chame o método setTitle () com uma String ou o ID da String como argumento.

    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);
    
        }
    }
Radheshyam Singh
fonte
16

Dentro de retorno de chamada Activity.onCreate () ou em outro local onde você precisa alterar o título:

getSupportActionBar().setTitle("Whatever title");
Andrey
fonte
5

tente fazer isso ...

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

funciona para mim

nonickh
fonte
3

Um pouco mais velho, mas tinha o mesmo problema. Eu fiz assim:

strings.xml

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

e certifique-se de definir isso no seu AndroidManifest.xml :

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

é fácil e você não precisa se preocupar com referências nulas e outras coisas.

Javatar
fonte
3
getActionBar().setTitle("edit your text"); 
Habibur Rahman Ovie
fonte
3

A maneira mais fácil de alterar o nome da barra de ação é acessar o AndroidManifest.xml e digitar esse código.

<activity android:name=".MainActivity"
    android:label="Your Label> </activity>
Mallikarjun Dodmani
fonte
2

Você acabou de adicionar esse código no onCreatemétodo

setTitle("new title");
NEC
fonte
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);

Para mais informações, consulte este link:

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

Bhaumik Sathvara
fonte
Você pode usar getSupportActionBar () se estiver usando AppCompatActivity
Hamid Vakilian
1

A melhor maneira de alterar o nome da barra de ação é acessar o AndroidManifest.xml e digitar esse código.

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

Kotlin

Você pode fazer isso programaticamente no Kotlin dessa maneira. Você apenas o ignora se "supportActionBar" for nulo :

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

Ou por aqui. Ele lança uma exceção se "supportActionBar" for nulo.

    supportActionBar!!.setTitle(R.string.my_text)
    supportActionBar!!.title = "My text"
Mateus Melo
fonte
0

A maneira mais fácil é ligar this.setTitle("...")se você estiver na atividade. E se você estiver em um fragmento, basta ligar getActivity().setTitle("...");

Dessa forma, você poderá alterar o título a qualquer momento, sem precisar chamá-lo antes setContentView(R.layout.activity_test);

Hatim
fonte
0

Para futuros desenvolvedores que usam o AndroidX e o componente de arquitetura de navegação .

Em vez de definir o título da barra de ferramentas usando uma das soluções acima, o que pode ser muito doloroso se você deseja defini-lo dinamicamente em uma alteração de pilha inversa, é possível definir um espaço reservado para o título do fragmento no gráfico de navegação, como a seguir:

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

O valor do espaço reservado deve ser fornecido usando o FragmentDirections(através do método de ação).

É então substituído no título e exibido como Hello World(quando placeholder = "World").

Fabian Damken
fonte
0

getSupportActionBar().setTitle("title");

Phani varma
fonte
Respostas somente de código são de baixa qualidade. Adicione algumas explicações sobre por que isso funciona.
Taslim Oseni