将字体大小从 SharedPreferences 检索到其他 activity

Retrieving font size from SharedPreferences to other activity

我正在尝试从其他 activity 的共享首选项中检索字体大小。我已经添加了 getPreferences 方法,但它不起作用。请向我解释我喜欢知识。

按照代码,我成功地使用搜索栏更改了文本大小,并将其保存到共享首选项,但是,在尝试检索其他 activity 上的字体大小时,它不起作用。

这是我的第一个 activity java


import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import android.content.Intent;

import android.content.SharedPreferences;
import android.os.Bundle;

import android.preference.PreferenceManager;
import android.view.MenuItem;
import android.widget.SeekBar;
import android.widget.TextView;

import com.google.android.material.navigation.NavigationView;

public class fontsize extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{

    //textsize

    int textSize = 30;

    //textView


    TextView textViewFont, textViewSize;

    //SharedPreferences

    SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;




    //variablesmenudrawer

    DrawerLayout drawerLayout;
    NavigationView navigationView;
    Toolbar toolbar;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fontsize);



        sharedPreferences = getSharedPreferences("fontsize", MODE_PRIVATE);
        editor = sharedPreferences.edit();

        int progress = sharedPreferences.getInt("progress", 0);


        //definingtextview

        textViewFont = findViewById(R.id.textViewFont);
        textViewSize = findViewById(R.id.textViewSize);




        //seekbar



        SeekBar seekBar = findViewById(R.id.seekbar);

        seekBar.setProgress(progress);

        textViewFont.setTextSize(textSize+seekBar.getProgress()); // size 30sp

        textViewSize.setText(seekBar.getProgress() + "/" + seekBar.getMax()); // 0/30


        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            int progressNew = 0;

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                textSize = textSize + (progress - progressNew);
                progressNew = progress;
                textViewFont.setTextSize(textSize);
                editor.putInt("progress", progress);
                editor.apply();



            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {


            }


            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

                textViewSize.setText(seekBar.getProgress() + "/" + seekBar.getMax()); // 0/30


            }
        });

        //definingmenudrawer

        drawerLayout = findViewById(R.id.drawer_layout4);
        navigationView = findViewById(R.id.nav_view4);
        toolbar = findViewById(R.id.toolbar4);


        //toolbar

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        //toolbar.setNavigationIcon(R.drawable.ic_toolbar);
        toolbar.setTitle("");
        toolbar.setSubtitle("");
        //toolbar.setLogo(R.drawable.ic_toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_baseline_dehaze_24);

        //navdrawermenu

        navigationView.bringToFront();
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

        navigationView.setNavigationItemSelectedListener(this);
        navigationView.setCheckedItem(R.id.nav_home);

    }

    @Override
    public void onBackPressed() {

        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        }
        else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

        switch (menuItem.getItemId()) {


            case R.id.nav_home:
                Intent intent = new Intent(fontsize.this, home.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                finish();
            case R.id.nav_fontsize:
        }

        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }

}

和我的第二个 activity java

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.Display;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

import com.google.android.material.navigation.NavigationView;

public class duatawassul extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{

    TextView textView;

    SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;


    //variablesmenudrawer

    DrawerLayout drawerLayout;
    NavigationView navigationView;
    Toolbar toolbar;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_duatawassul);

        sharedPreferences = getSharedPreferences("fontsize", MODE_PRIVATE);




        textView = findViewById(R.id.duatawassultext);




        //definingmenudrawer

        drawerLayout = findViewById(R.id.drawer_layout1);
        navigationView = findViewById(R.id.nav_view1);
        toolbar = findViewById(R.id.toolbar1);


        //toolbar

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        //toolbar.setNavigationIcon(R.drawable.ic_toolbar);
        toolbar.setTitle("");
        toolbar.setSubtitle("");
        //toolbar.setLogo(R.drawable.ic_toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_baseline_dehaze_24);

        //navdrawermenu

        navigationView.bringToFront();
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

        navigationView.setNavigationItemSelectedListener(this);
        navigationView.setCheckedItem(R.id.nav_home);

    }


    @Override
    public void onBackPressed() {

        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        }
        else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

        switch (menuItem.getItemId()) {


            case R.id.nav_home:
                Intent intent = new Intent(duatawassul.this, home.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                finish();
            case R.id.nav_fontsize:
                Intent intent1 = new Intent(duatawassul.this, fontsize.class);
                startActivity(intent1);
                finish();

        }

        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }
}

如果你想在你的应用程序中使用共享首选项,那么你必须首先像下面那样将值添加到共享首选项中,请记住你可以将它作为一个字符串和一个整数,这取决于你你正在使用

SharedPreferences.Editor editor = context.getSharedPreferences("fontsize", MODE_PRIVATE).edit();
editor.putInt("fontsizeis", 14);
editor.apply();

将值添加到共享首选项后,您必须获取该值。你可以从任何你想要的地方获得你可以使用它的价值。

SharedPreferences sharePreferences= getSharedPreferences("fontsize", MODE_PRIVATE);
if(sharePreferences.contains("fontsizeis")){
   int fontsizeis= sharePreferences.getInt("fontsizeis", 0); 
   if(fontsizeis != 0){
      Toast.makeText(context, "you find your desired value here", Toast.LENGTH_SHORT).show();
   }else{
      Toast.makeText(context, "desired value not found some thing issue", Toast.LENGTH_SHORT).show();
   }    
}else{
   Toast.makeText(context, "Share preferences does not contain this key value pair", Toast.LENGTH_SHORT).show();
}

这些条件用于避免空点执行

在第二个 activity 的 on create 方法中添加您的原始代码中似乎缺少的以下内容

   prefs = getSharedPreferences("fontsize", MODE_PRIVATE);
   //this line is nowhere found in your second activity
   int progress=prefs.getInt("progress",0);