Размер шрифта не сохраняется в SharedPreferences - PullRequest
1 голос
/ 10 сентября 2011

Я взял пример программы из книги, в которой хранится размер текста и текст. когда я снова запускаю программу, размер текста уменьшается. Может кто-нибудь помочь мне, я новичок в Android

 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();
        }
    });

// Загрузка общего объекта предпочтений

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) {

        }

    });

1 Ответ

2 голосов
/ 10 сентября 2011

Вы разыгрываете свой float fontSize на int, когда передаете его на 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.Таким образом, мы сохраняем исходную функциональность вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...