web-dev-qa-db-fra.com

Logo ActionBar centré et éléments Action sur les côtés

Comment pourrais-je faire une barre d'action pour avoir un logo au centre et deux éléments d'action sur les côtés comme celui-ci?

enter image description here

I will be using ActionBar Sherlock.

34
urSus

Comme je l'ai noté dans un commentaire, je ne sais pas exactement si cela changerait avec ABS (je suis sûr que peu de choses le feraient), mais avec la barre d'action standard, vous pouvez charger une mise en page personnalisée .xml pour votre titre de barre d'action. Par exemple, vous pourriez avoir action_bar_title.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@drawable/your_desired_background" >

<TextView
        Android:id="@+id/title"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_centerInParent="true"
            Android:maxLines="1"
            Android:ellipsize="end"
            Android:text="@string/app_name"
            Android:textAppearance="?android:attr/textAppearanceMedium"/>

</RelativeLayout>

Ensuite, dans votre activité, vous voudriez appeler une méthode comme celle-ci dans onCreate ():

private void setupActionBar() {
        ActionBar ab = getActionBar();
        ab.setDisplayShowCustomEnabled(true);
        ab.setDisplayShowTitleEnabled(false);
        ab.setIcon(R.drawable.your_left_action_icon);
        LayoutInflater inflator = (LayoutInflater) this
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflator.inflate(R.layout.action_bar_title, null);

        TextView titleTV = (TextView) v.findViewById(R.id.title);
        Typeface font = Typeface.createFromAsset(getAssets(),
                "fonts/your_custom_font.ttf");
        titleTV.setTypeface(font);

        ab.setCustomView(v);

            ab.setHomeAsUpEnabled(true);
    }

Pour prendre le contrôle de l'élément d'action de gauche, vous pouvez le faire dans votre activité:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.yourRightActionItem:
                        //do something
                        return true;
        case Android.R.id.home: //<-- this will be your left action item
            // do something
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

Bien sûr, assurez-vous également de faire les autres configurations nécessaires pour les éléments Action dans les xml de votre menu. Ce sera pour tous les éléments d'action du côté droit.

Edit: Je viens de voir dans un autre commentaire que vous avez dit que le titre serait une image. Si tel est le cas, remplacez simplement le TextView que j'ai utilisé dans mon exemple par votre ImageView et ignorez le code de personnalisation de police dans la méthode setupActionBar ().

Edit2: J'ai mis à jour mon Java. Vous devrez faire ab.setHomeAsUpEnabled (true), puis avoir un thème personnalisé pour implémenter un invisible (ou peut-être @null même si je ne sais pas) if Android acceptera cela) dessinable pour la maison comme indicateur de montée. Voir ici (extrait de la réponse ici :)

<style name="Theme.MyFancyTheme" parent="Android:Theme.Holo">
    <item name="Android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>
    <!-- or you could try @null -->
</style>
40
dennisdrew