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?
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"
.../>
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%.
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"
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>
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"
/>
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 ...