web-dev-qa-db-fra.com

Comment ajouter des boutons comme Actualiser et Rechercher dans la barre d'outils Android?

enter image description here

J'ai créé une barre d'outils, mais lorsque j'ajoute des éléments de menu dans menu.xml, elle apparaît toujours en tant que débordement. Comment puis-je l'ajouter séparément? De plus, le titre est affiché au milieu (verticalement), comment puis-je le montrer en haut?

menu.xml

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    tools:context="com.example.toolbar.MainActivity" >

       <item Android:id="@+id/action_search"
          Android:icon="@drawable/ic_launcher"
          Android:title="@string/action_search"
          Android:showAsAction="ifRoom"
          Android:orderInCategory="1" 
          Android:menuCategory="secondary"/>

    <item
        Android:id="@+id/action_settings"
        Android:orderInCategory="100"
        Android:title="@string/action_settings"
        app:showAsAction="never"/>

</menu>

MainActivity.Java

package com.example.toolbar;

import Android.support.v7.app.ActionBarActivity;
import Android.support.v7.widget.Toolbar;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
        setSupportActionBar(toolbar);
       // toolbar.setNavigationIcon(R.drawable.back);
        toolbar.setLogo(R.drawable.ic_launcher);
        //toolbar.setTitle("Title");
       // toolbar.setSubtitle("Subtitle");





    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

activity_main.xml

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"

    tools:context="com.example.toolbar.MainActivity" >

     <Android.support.v7.widget.Toolbar
         xmlns:app="http://schemas.Android.com/apk/res-auto"
         Android:id="@+id/my_awesome_toolbar"
         Android:layout_width="fill_parent"
         Android:layout_height="128dp"
         Android:layout_alignParentLeft="true"
         Android:layout_alignParentTop="true"
         Android:background="?attr/colorPrimary"
         Android:minHeight="?attr/actionBarSize"
         app:theme="@style/ActionBarThemeOverlay">
     </Android.support.v7.widget.Toolbar>



</RelativeLayout>
62
kunal.c

OK, j’ai eu les icônes parce que j’écrivais dans menu.xml Android:showAsAction="ifRoom" au lieu de app:showAsAction="ifRoom" puisque j’utilise la bibliothèque v7.

Cependant, le titre vient au centre de la barre d'outils étendue. Comment le faire apparaître en haut?

79
kunal.c

Essayez de faire ceci:

getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);

et si vous avez créé votre barre d’outils personnalisée (ce que je suppose que vous avez fait), vous pouvez utiliser le moyen le plus simple possible pour le faire:

toolbarTitle = (TextView)findViewById(R.id.toolbar_title);
toolbarSubTitle = (TextView)findViewById(R.id.toolbar_subtitle);
toolbarTitle.setText("Title");
toolbarSubTitle.setText("Subtitle");

Il en va de même pour toutes les autres vues que vous avez insérées dans votre barre d’outils. J'espère que ça aide.

5
menilv

Ajoutez cette ligne en haut:

"xmlns:app="http://schemas.Android.com/apk/res-auto"

et ensuite utiliser:

app:showasaction="ifroom"

3
DishantPatel

Pour contrôler l'emplacement du titre, vous pouvez définir une police personnalisée comme expliqué ici (par twaddington): Lien

Ensuite, pour déplacer la position du texte, dans updateMeasureState(), vous ajouteriez p.baselineShift += (int) (p.ascent() * R); De manière similaire dans updateDrawState() ajoutez tp.baselineShift += (int) (tp.ascent() * R); où R est le double entre -1 et 1.

0
HaimS