web-dev-qa-db-fra.com

Mise en page personnalisée sous Android ActionBar

Je viens juste de commencer le développement Android à partir de IOS et je suis tombé sur un problème. Et après un jour d’essai, j’ai décidé que je demanderais aux gens de déborder de la pile.

Donc mon problème:

J'ai une application et dans la barre d'action (par défaut, pas de sherlock), je veux 1 logo et 2 lignes de texte. Et sur Internet, je trouve le setCustomView pour la barre d'action. Et la coutume XML est chargé mais je ne peux pas obtenir la mise en page correcte.

Donc, d’abord, j’ai configuré la barre d’action:

private void setupActionBar() {
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowTitleEnabled(false);
    actionBar.setDisplayUseLogoEnabled(false);
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowHomeEnabled(false);

    LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    View customNav = LayoutInflater.from(this).inflate(R.layout.actionbar, null); // layout which contains your button.

    actionBar.setCustomView(customNav, lp1);
}

Que le xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_gravity="fill_horizontal"
    Android:orientation="horizontal"
    Android:background="@color/Blue">

    <TextView
        Android:id="@+id/text_left"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/title_menu"
        Android:textColor="@color/White"
        Android:paddingLeft="5dp"
        Android:layout_gravity="left"/>

    <ImageView
        Android:id="@+id/icon"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:src="@drawable/Icon"
        Android:layout_gravity="center"/>

    <TextView
        Android:id="@+id/text_right"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/title_help"
        Android:layout_gravity="right"
        Android:textColor="@color/White"
        Android:paddingRight="5dp"/>

</LinearLayout>

Mais le résultat est quelque chose que je ne cherche pas:

Problem in an image

Alors qu'est-ce que j'oublie/fais mal/ou dois-je faire?

12
Msmit1993

essayez de changer la mise en page racine en mise en page relative

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="fill_horizontal"
Android:orientation="horizontal">

<TextView
    Android:text="left text"
    Android:layout_toLeftOf="@+id/icon"
    Android:layout_alignParentLeft="true"
    Android:id="@+id/text_left"
    Android:gravity="left"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:paddingLeft="5dp"/>

<ImageView
    Android:layout_centerHorizontal="true"
    Android:id="@+id/icon"
    Android:layout_width="10dp"
    Android:layout_height="wrap_content"
    Android:src="@drawable/bg_sunrise"
    Android:layout_gravity="center"/>

<TextView
    Android:text="Right txt"
    Android:layout_toRightOf="@+id/icon"
    Android:id="@+id/text_right"
    Android:layout_width="match_parent"
    Android:gravity="right"
    Android:layout_height="wrap_content"
    Android:layout_gravity="right"
    Android:paddingRight="5dp"/> </RelativeLayout>
14
Fahriyal Afif

vous n'obtenez pas votre résultat parce que:

enter image description here

vous devez: 

  1. si vous utilisez le thème AppCompat 

enter image description here

  1. ajouter à la structure de votre activité 

enter image description here

  1. dans le code, par exemple. dans onCreate (), définissez une barre d'outils pour remplacer la barre d'action.

enter image description here

2
ceph3us

Vous pouvez également utiliser LinearLayout en tant que racine et ajouter Android: weightSum et spécifier un poids de mise en page sur les trois vues enfant. 

Qu'est-ce qu'Android: weightSum in Android, et comment ça marche?

0
Clocker