web-dev-qa-db-fra.com

Modification de la taille du texte de l'élément de menu dans android

J'utilise des éléments de menu simples dans la barre d'action en utilisant le code suivant dans l'activité principale:

    package com.kaasib.ftpclient;

import Android.app.Activity;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.app.ActionBar;


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        boolean ret;
        if(item.getItemId() == R.id.connection_manager){
            ret = true;
        }else{
            ret = super.onOptionsItemSelected(item);
        }

        return ret;
    }
}

Voici le menu xml dans main.xml:

    <menu xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <item
        Android:id="@+id/connection_manager"
        Android:orderInCategory="100"
        Android:showAsAction="collapseActionView"
        Android:title="@string/connection_manager"
        Android:textSize="2sp"
        />

</menu> 

Il fonctionne sauf qu'il n'apporte aucune modification à la taille du texte. À l'heure actuelle, la taille du texte de l'élément de menu est plus grande tandis que je souhaite que la taille de la police soit plus petite. Alors qu'est-ce que je fais mal? Ne devrait pas Android:textSize attribuer le travail? Ou existe-t-il un autre moyen de le faire? Je crois que la taille du texte doit être définie à partir de XML et non à partir de Java car c'est une chose liée au design. Une suggestion?

15
Hafiz

Ajoutez l'élément "Android: actionMenuTextAppearance" pour vos activités dans votre styles.xml:

<style name="AppThemeActivity" parent="Theme.AppCompat.Light">
    <item name="Android:actionMenuTextAppearance">@style/yourstyle</item>
    ...
</style>

Appliquez ce style à votre activité dans votre manifeste:

<activity 
Android:theme="@style/AppThemeActivity"
.../>
8
Pink Cocot

Ok, c'est donc ma solution, vous pouvez réellement utiliser le SpannableString pour récupérer le texte puis changer la police via RelativeSizeSpan (si vous voulez la taille du texte par rapport à celle par défaut) ou via AbsoluteSizeSpan (si vous voulez saisir manuellement la taille du texte ):

public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater awesome = getMenuInflater();
    awesome.inflate(R.menu.menu_main, menu);
    for(int i = 0; i < menu.size(); i++) {
        MenuItem item = menu.getItem(i);
    SpannableString spanString = new SpannableString(menu.getItem(i).getTitle().toString());
        int end = spanString.length();
    spanString.setSpan(new RelativeSizeSpan(1.5f), 0, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    item.setTitle(spanString);
}
    return true;
}

Cet exemple augmente la taille des textes des éléments de menu de 50%.

6
John Petrucci

ajoutez dans le fichier xml de style comme cette ligne de code inférieure votre taille de police personnalisée,

après ça

<style name="menu_text_style" parent="@Android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Menu">
    <item name="Android:textSize">16sp</item>
    <item name="Android:textColor">@color/tab_default_color</item>
    <item name="Android:textAllCaps">false</item>
</style>

après avoir à "menu_text_style" ajouter à votre NavigationView

        app:itemTextAppearance="@style/menu_text_style"
4
Caner Yılmaz

Cela fait donc longtemps que cela n'a pas été demandé, mais j'aime cette solution, car steven smiths change chaque point de vue:

Ajoutez cette ligne à NavigationView:

app:itemTextAppearance="@style/MenuItems"

Et cela aux styles:

<style name="MenuItems" parent="AppTheme">
    <item name="Android:textSize">18sp</item>
    <item name="Android:fontFamily">sans-serif-light</item>
</style>
3
jobbert

Fonctionne bien, sur les anciennes API également:

Dans votre style.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="actionMenuTextAppearance">@style/ActionMenuTextAppearance</item>
    <item name="Android:actionMenuTextAppearance">@style/ActionMenuTextAppearance</item>
</style>

<style name="ActionMenuTextAppearance" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Menu">
    <item name="Android:textSize">16sp</item>
    <item name="Android:textColor">#1a1a1a</item>
</style>

Dans votre manifeste:

<activity
        Android:name=".MainActivity"
        Android:theme="@style/AppTheme"
        />
1
researcher

Ou vous pouvez définir la taille de la police dans l'élément valeurs/styles pour le thème que vous utilisez. Dans mon cas, le style indiqué dans le fichier AndroidManifest.xml est:

Android:theme="@style/AppTheme"

Et donc mon style pour l'AppTheme est maintenant:

<style name="AppTheme" parent="AppBaseTheme">
    <item name="Android:textSize">20sp</item>
</style>

Cela semble étrange, mais cela ne fonctionne pas pour l'article ...

0
steven smith