Saving Text Size in shared preference

2019-08-02 21:21发布

问题:

I'm trying out to save the text size in shared preference ,while running the project my application stops unexpectedly here is the code :
SharedPreferenceActivity.class

package com.SharedPreference;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SeekBar;

public class SharedPreferenceActivity extends Activity 

{

SeekBar seek=(SeekBar)findViewById(R.id.seekBar1);
EditText ed1=(EditText)findViewById(R.id.editText1);
Button b=(Button)findViewById(R.id.button1);
private final String TEXT_VALUE_KEY="textvalue";
private final String FONT_SIZE_KEY="fontsize";
final String MyPref="preference";

/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState)
 {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);  
b.setOnClickListener(new View.OnClickListener() {

 @Override
 public void onClick(View arg0) {

SharedPreferences  pref=getSharedPreferences(MyPref,MODE_PRIVATE);              
SharedPreferences.Editor editor=pref.edit();            
editor.putFloat(FONT_SIZE_KEY,ed1.getTextSize());           
editor.putString(TEXT_VALUE_KEY, ed1.getText().toString());         
editor.commit();

}

});

 SharedPreferences prefs=getSharedPreferences(MyPref, MODE_PRIVATE);

 final float fontsize=prefs.getFloat(FONT_SIZE_KEY, 12);

 seek.setProgress((int) fontsize);

 ed1.setText(prefs.getString(TEXT_VALUE_KEY, "")); 

 ed1.setTextSize(seek.getProgress());

 seek.setOnSeekBarChangeListener(new  SeekBar.OnSeekBarChangeListener() {


public void onStopTrackingTouch(SeekBar arg0) {

// TODO Auto-generated method stub

            }

            public void onStartTrackingTouch(SeekBar arg0) {
                // TODO Auto-generated method stub

            }

            public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
                // TODO Auto-generated method stub
                ed1.setTextSize(fontsize);
            }
        });
    }
}

XML file:

<?xml version="1.0" encoding="utf-8"?>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

 android:layout_width="fill_parent"

 android:layout_height="fill_parent"

 android:orientation="vertical" >

<TableRow >


  <SeekBar

     android:id="@+id/seekBar1"

   android:layout_width="match_parent"

   android:layout_height="wrap_content" />


</TableRow>

<TableRow >

<EditText

   android:id="@+id/editText1"

  android:layout_width="match_parent"

  android:layout_height="150dp"

  android:layout_weight="0.6"

  android:ems="10" ></EditText>


</TableRow>

<TableRow >

 <Button

 android:id="@+id/button1"

  android:layout_width="50dp"

 android:layout_height="50dp"

 android:text="Button" />

</TableRow>

</TableLayout>

回答1:

find the views in your onCreate method.

public void onCreate(Bundle savedInstanceState)
{
 super.onCreate(savedInstanceState);

 setContentView(R.layout.main);
 seek=(SeekBar)findViewById(R.id.seekBar1);
 ed1=(EditText)findViewById(R.id.editText1);
 b=(Button)findViewById(R.id.button1);
 ...
 ...
}


回答2:

ed1 is not initialize using findviewbyId in Oncreatre.....

as you can only get ed1 when you have set the content view in onCreate

b, ed1, seekbar all should be initialize after this line " setContentView(R.layout.main);" using findviewbyId in Oncreatre.....