2015-04-09 1 views
0

J'ai une barre d'action avec un menu de paramètres. Sur cela, il est écrit "Smaller Text", que je veux ensuite obtenir le texte et soustraire 2 de tout ce que la taille du texte est actuellement. J'ai le code suivant qui, pour une raison quelconque, rend le texte plus gros.soustraire 2 à la taille du texte d'un textview en java

@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.small) { 
     TextView english = (TextView) findViewById(R.id.English); 

     english.setTextSize(english.getTextSize()-2); 

     return true; 
    } 

Qu'est-ce que je fais mal?

Répondre

1

Vous devez connaître les métriques d'affichage actuelles, en particulier la densité, de l'appareil afin d'effectuer le réglage de taille correct. Les tablettes à très haute résolution auront une densité de pixels plus élevée. Par défaut, l'unité utilisée lorsque que vous appelez getTextSize est SP ou Pixels mis à l'échelle. Ainsi, si vous ne considérez pas la densité et que vous appelez setTextSize en lui transmettant la taille de texte actuelle, cela ne fonctionnera pas. Le code ci-dessous est la bonne façon de le faire.

DisplayMetrics metrics; 
metrics = getApplicationContext().getResources().getDisplayMetrics(); 
float fTextSize = english.getTextSize()/metrics.density; 
english.setTextSize(fTextSize-2); 
+0

Généralement, évitez les réponses au code uniquement. Pensez à ajouter une 'description' qui aide à expliquer votre code. Merci – MickyD

+0

@MickyDuncan merci pour les heads-up. –

+1

Cela semble beaucoup mieux. Bienvenue à SO en passant! – MickyD