2011-09-10 79 views
1

我從存儲文本大小和文本的書中摘取了示例程序。當我再次運行程序時,文本大小正在減小。誰能幫我出我的新到Android字體大小未保存在SharedPreferences中

public void onClick(View v) { 

      //Getting the SharedPreference object 
      prefs = getSharedPreferences(prefName, MODE_PRIVATE); 
      SharedPreferences.Editor editor = prefs.edit(); 

      // save the values in the EditText view to preferences 
      editor.putFloat(FONT_SIZE_KEY, editText.getTextSize()); 
      editor.putString(TEXT_VALUE_KEY, editText.getText().toString()); 

      // Saves the values 
      editor.commit(); 

      //Display file saved message 
      Toast.makeText(getBaseContext(), "Font size saved Successfully!", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

//加載的共享對象Prefernces

SharedPreferences prefs = getSharedPreferences(prefName, MODE_PRIVATE); 

    // Set the TextView font size to the previously saved values 
    float fontSize = prefs.getFloat(FONT_SIZE_KEY, 12); 

    // init the SeekBar and EditText 
    seekBar.setProgress((int)fontSize); 
    editText.setText(prefs.getString(TEXT_VALUE_KEY, "")); 
    editText.setTextSize(seekBar.getProgress()); 

    seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){ 

     @Override 
     public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) { 
      // Change the font size of the EditText 
      editText.setTextSize(progress); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar arg0) { 

     } 

     @Override 
     public void onStopTrackingTouch(SeekBar arg0) { 

     } 

    }); 

回答

2

你投你的float fontSizeint當你把它傳遞給seekBar.setProgress()。這使得它失去了小數部分,因此變得更小。然後您從seekBar中取回這個四捨五入的值,並用它調用editText.setTextSize()。顯然它應該變小,因爲價值已經失去了它的小數部分。

嘗試將您的進度的最大值設置爲一個較大的值(seekBar.setMax(1000000000)),最初調用seekBar.setProgress((int)(fontSize * 10000000)),並在onProgressChanged中執行editText.setTextSize(((float) progress)/10000000)。我們這裏所做的基本上是用一個整數形式的浮點數乘以一個大的值。請參閱,如果乘以1.234乘以1000,則得到1234.0,現在可以將其轉換爲int,而不損失派系部分。爲了將其轉換回來,我們首先將int 1234轉換爲浮點數1234.0,然後除以1000.並且由於您的原始程序在進度條中使用了百分比值,因此我們將最大值設置爲比用於轉換的係數大100倍int和float形式之間的數字。這樣我們就保留了程序的原始功能。

+0

對不起。不工作... – Pramod

+0

好的,添加了更完整的解決方案。 – dragonroot