App内部改变字体大小并即时刷新

应广大群友要求,特将此效果发至博客,希望能给各路大神,一丝微不足道的帮助~

我们首先应该考虑的是怎样是全体改变,而不是单个改动(虽然这也能做出来,但是太麻烦),我们需要在styles文件下创建字体的大小样式,但在此之前,我们应该创建一个attrs文件:(名字起的有点不规范,见谅~)


    
    

然后我们应该在styles文件夹下创建我们的字体大小样式了:


    

    
    


    


    

接下来就是我们MainActivity中的布局文件了,这里需要注意的是我textView的字体大小:



    

这里我只用了一个textSize,还有一个textSize2没有用,是因为我不想写第二个不同尺寸的控件~

那么接下来就看MainActivity中的代码了,,如果不懂,可以看完在整理:

public class Main2Activity extends AppCompatActivity {

    private Button btn_intent;
    private boolean flag = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        /**
         *  App.font.getInt("textSize",0)::这是设置字体页面时保存到数据库的值,
         *  我们可以根据这个值进行判断当前选择哪套字体,必须在初始化视图之前完成
         *  因为设置字体样式是在初始化视图之前操作的,而且只会在app启动时才走
         */
        getStates(App.font.getInt("textSize",0));
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //定义一个标识,用来判断App是不是第一次进入的
        flag = true;
        btn_intent = (Button)findViewById(R.id.btn_intent);
        //点击跳转设置页面
        btn_intent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Main2Activity.this, ButtonActivity.class);
                startActivity(intent);
            }
        });
    }

    //用来设置当前页面的字体大小
    public void getStates(int states){
        //数据库如果没有值,默认是0,所以假如没有选择字体时,就要把字体设置为标准的
        if(states==0){
            setTheme(R.style.Default_TextSize_Small);
        }else
        if (1 == states) {
            setTheme(R.style.Default_TextSize_Small);
        } else if (2 == states) {
            setTheme(R.style.Default_TextSize_Middle);
        } else {
            setTheme(R.style.Default_TextSize_Big);
        }
    }

    //在页面失去焦点时,表面此页面已经切换
    @Override
    protected void onPause() {
        super.onPause();
        flag = false;
    }

    //再次获得焦点时,就可以进行刷新Activity了
    @Override
    protected void onResume() {
        super.onResume();
        if(flag==false) {
            //这个方法是Activity中自带的,可以用来刷新Activity
            recreate();
            //在Fragment中使用的话,用这个
            //getActivity.recreate();

            //在将标识设置成true;
            flag = true;
        }
    }
}

那么,接下来就设置字体的Activity了:

public class ButtonActivity extends BaseThemeActivity implements View.OnClickListener {

    Button btnThree;
    private Button btn_one;
    private Button btn_two;
    private Button btn_three;
    private TextView tv_title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /**
         * 这里面其实就放了三个按钮,,,点击事件
         */
        setContentView(R.layout.activity_button);
        btn_one = (Button)findViewById(R.id.btn_one);
        btn_two = (Button)findViewById(R.id.btn_two);
        btn_three = (Button)findViewById(R.id.btn_three);
        btn_one.setOnClickListener(this);
        btn_two.setOnClickListener(this);
        btn_three.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        /**
         * 在点击的时候,将字体的代替值放进SP中,以便以后使用
         * 然后销毁页面就行···记得提交
         */
        switch (v.getId()){
            case R.id.btn_one:
                App.edit.putInt("textSize",1);
                App.edit.commit();
                finish();
                break;

            case R.id.btn_two:
                App.edit.putInt("textSize",2);
                App.edit.commit();
                finish();
                break;

            case R.id.btn_three:
                App.edit.putInt("textSize",3);
                App.edit.commit();
                finish();
                break;
        }
    }
}

其次就是这个页面的XML,我觉的不用写的,但是考虑到大多数程序员都不乐意动弹,我就粘上去~~




    

那还有就是数据库那个SP了,既然我们调字体大小要在全局里,那么就在Application中做就可以了:

public class App extends Application{

    public static SharedPreferences font;
    public static SharedPreferences.Editor edit;

    @Override
    public void onCreate() {
        super.onCreate();
        //创建数据库  记得在AndroidManifest里面注册一下
        font = getSharedPreferences("Font", MODE_PRIVATE);
        edit = font.edit();
    }
}

好了,因为在真机上演示,我就不放效果图了,大家可以粘一粘,跑一跑,代码不多······

 
 

你可能感兴趣的:(App内部改变字体大小并即时刷新)