Autore Topic: Diminuire e aumentare il carattere di una textView in maniera dinamica  (Letto 762 volte)

Offline bakiko

  • Utente junior
  • **
  • Post: 74
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC One
  • Sistema operativo:
    Windows 7
Salve ragazzi, volevo porvi un banale problema che però non riesco a risolvere.
Volevo creare due piccole icone nell' actionBar in modo da poter aumentare e diminuire il carattere (un pò quello che contine l'applicazione Sportmediaset se si apre un articolo).

Ho creato le due icone da mettere all'interno dell'actionBar.Questa è l'activity principale:
Codice (Java): [Seleziona]
public class ActivityArticolo extends Activity {
      protected void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.activity_activity_articolo);
                 ActionBar ab = getActionBar();
                 ab.setHomeButtonEnabled(true);
                ........
                }
     
@Override
        public boolean onCreateOptionsMenu(Menu menu) {
                MenuInflater mMenuInflater = getMenuInflater();
                mMenuInflater.inflate(R.menu.focustext, menu);
                return true;
        }

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
                float n=articolo.getTextSize();
                switch (item.getItemId()) {
                case R.id.focusout:
                        articolo.setTextSize(n-1);
                        return true;
                case R.id.focusin:
                        articolo.setTextSize(n+1);
                        return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

Questo invece è il file .xml relativo all'actionBar:
Codice (Java): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
     <item
       android:id="@+id/focusout"
       android:icon="@drawable/zoomout2"
       android:title="diminuisce Zoom"
       android:showAsAction="ifRoom"/>
     <item
       android:id="@+id/focusin"
       android:icon="@drawable/zoomin"
       android:title="aumenta Zoom"
       android:showAsAction="ifRoom"/>    
</menu>

Alla pressione di qualsiasi dei 2 tasti viene svolta la stessa azione, ovvero ingrandisce il testo in maniera esagerata.
Sicuramente sarà un errore banale ma non riesco a venirne a capo...Grazie a tutti
« Ultima modifica: 19 Agosto 2013, 17:39:24 CEST da bakiko »

Offline matttt

Re:Diminuire e aumentare il carattere di una textView in maniera dinamica
« Risposta #1 il: 20 Agosto 2013, 20:36:36 CEST »
0
Vedo che getTextSize ti ritorna un float (con dimensione in pixel)... se la variazione delle dimensioni del testo è troppo grande per te potresti provare ad aumentare / diminuire di un valore minore. Tipo 0.2 o 0.5
Le mie apps su Google Play Store:

Offline bakiko

  • Utente junior
  • **
  • Post: 74
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC One
  • Sistema operativo:
    Windows 7
Re:Diminuire e aumentare il carattere di una textView in maniera dinamica
« Risposta #2 il: 20 Agosto 2013, 20:48:19 CEST »
0
Vedo che getTextSize ti ritorna un float (con dimensione in pixel)... se la variazione delle dimensioni del testo è troppo grande per te potresti provare ad aumentare / diminuire di un valore minore. Tipo 0.2 o 0.5
Ti ringrazio per la risposta. In effetti anche io avevo pensato di fare delle piccolissime variazione (0.1 o 0.2).La cosa che non riesco a spiegarmi é perché, indipendentemente dal tasto che premo, mi aumenta la grandezza della textview e non me la diminuisce. È come se lo switch non lo vedesse proprio

Inviato dal mio HTC One usando Tapatalk 4


Offline matttt

Re:Diminuire e aumentare il carattere di una textView in maniera dinamica
« Risposta #3 il: 20 Agosto 2013, 21:00:38 CEST »
0
Molto strano... potresti fare un po' di debug e vedere se la parte di "focusout" (io metterei "zoomin" / "zoomout" cmq :P) viene effettivamente invocata, eventualmente puoi provare anche a dargli un valore basso fisso, se quello funziona potrebbe esserci un problema nel decremento...
Le mie apps su Google Play Store:

Offline bakiko

  • Utente junior
  • **
  • Post: 74
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC One
  • Sistema operativo:
    Windows 7
Re:Diminuire e aumentare il carattere di una textView in maniera dinamica
« Risposta #4 il: 20 Agosto 2013, 21:50:43 CEST »
0
Hai ragione :P provvederò a cambiare nome... Ti terrò informato, grazie per l'aiuto ;D

Inviato dal mio HTC One usando Tapatalk 4


Offline NanoAndroide

  • Utente junior
  • **
  • Post: 63
  • Respect: +3
    • Google+
    • Mostra profilo
    • MeToo
  • Dispositivo Android:
    GT-S5570
  • Play Store ID:
    MeToo
  • Sistema operativo:
    Windows 7
Re:Diminuire e aumentare il carattere di una textView in maniera dinamica
« Risposta #5 il: 23 Agosto 2013, 11:36:46 CEST »
+1
Secondo me c'è qualcosa che non funziona nel getTextSize: se ti definisci un field 'size' e lo vari, funziona. Per semplicità/rapidità di scrittura ho provato con dei button invece che dall'option menu, ma la logica è sempre la stessa e funziona:

Codice (Java): [Seleziona]
public class MainActivity extends Activity {
       
        Button ZoomInButton, ZoomOutButton, ExitButton;
        TextView tv1;
        float size;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                ZoomInButton = (Button) findViewById(R.id.button1); ZoomInButton.setOnClickListener(myListener);
                ZoomOutButton = (Button) findViewById(R.id.button2); ZoomOutButton.setOnClickListener(myListener);
                ExitButton = (Button) findViewById(R.id.button3); ExitButton.setOnClickListener(myListener);
               
                tv1 = (TextView) findViewById(R.id.textView2);
               
                size = 12;
                tv1.setTextSize(size);
        }
       
        OnClickListener myListener=new View.OnClickListener(){

                public void onClick(View v) {
                                               
                        if (v==ZoomInButton) zoomin();
                        if (v==ZoomOutButton) zoomout();
                        if (v==ExitButton) finish();
                       
                }
               
        };
       
        void zoomin(){
                if (size<20){
                        size+=1;
                }
                tv1.setTextSize(size);
        }
       
        void zoomout(){
                if (size>0){
                        size-=1;
                }
                tv1.setTextSize(size);
        }

}

Offline bakiko

  • Utente junior
  • **
  • Post: 74
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC One
  • Sistema operativo:
    Windows 7
Re:Diminuire e aumentare il carattere di una textView in maniera dinamica
« Risposta #6 il: 01 Settembre 2013, 12:01:41 CEST »
0
Secondo me c'è qualcosa che non funziona nel getTextSize: se ti definisci un field 'size' e lo vari, funziona. Per semplicità/rapidità di scrittura ho provato con dei button invece che dall'option menu, ma la logica è sempre la stessa e funziona:

Codice (Java): [Seleziona]
public class MainActivity extends Activity {
       
        Button ZoomInButton, ZoomOutButton, ExitButton;
        TextView tv1;
        float size;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                ZoomInButton = (Button) findViewById(R.id.button1); ZoomInButton.setOnClickListener(myListener);
                ZoomOutButton = (Button) findViewById(R.id.button2); ZoomOutButton.setOnClickListener(myListener);
                ExitButton = (Button) findViewById(R.id.button3); ExitButton.setOnClickListener(myListener);
               
                tv1 = (TextView) findViewById(R.id.textView2);
               
                size = 12;
                tv1.setTextSize(size);
        }
       
        OnClickListener myListener=new View.OnClickListener(){

                public void onClick(View v) {
                                               
                        if (v==ZoomInButton) zoomin();
                        if (v==ZoomOutButton) zoomout();
                        if (v==ExitButton) finish();
                       
                }
               
        };
       
        void zoomin(){
                if (size<20){
                        size+=1;
                }
                tv1.setTextSize(size);
        }
       
        void zoomout(){
                if (size>0){
                        size-=1;
                }
                tv1.setTextSize(size);
        }

}
Provato e perfettamente funzionante, grazie mille ragazzi.
Posto sotto il codice completo:
Codice (Java): [Seleziona]
private float size;
private TextView articolo;

public class ActivityArticolo extends Activity {
      protected void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.activity_activity_articolo);
                 ActionBar ab = getActionBar();
                 ab.setHomeButtonEnabled(true);
                 articolo=(TextView) this.findViewById(R.id.textArticolo);
                 size=12;
                 articolo.setTextSize(size);
                 ........
                }
     
@Override
        public boolean onCreateOptionsMenu(Menu menu) {
                MenuInflater mMenuInflater = getMenuInflater();
                mMenuInflater.inflate(R.menu.focustext, menu);
                return true;
        }

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                case R.id.zoomout:
                        if(size>2)
                                size-=1;
                        articolo.setTextSize(size);
                        return true;
                case R.id.zoomin:
                        if(size<50)
                                 size+=1;
                        articolo.setTextSize(size);
                        return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
Il codice .xml riferito all'actionBar è quello riportato nel primo post.....Grazieeeee :D