我正在尝试使用底部导航菜单在我的 pdf 阅读器中实现夜间模式和水平滑动模式。我已经实现了这两个功能,但问题是我不知道如何保存这两个功能的状态。假设当前我启用了暗模式通过单击我的导航菜单,然后当我尝试启用水平模式时,我的应用程序会关闭暗模式,当我从水平模式转到暗模式时也是如此,它会关闭水平滑动功能。我想保留两者功能启用,除非用户通过重新单击它来关闭它。我怎样才能实现这一点?
这是我的 android studio 中的 Viewpdf.java 代码:
public static PDFView pdfView;
boolean ishoriz = true;
int pagenumber;
TextView textView;
BottomNavigationView bottomNavigationView;
SharedPreferences mprefs;
SharedPreferences sharedPreference;
SharedPreferences.Editor editor;
boolean nightmode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pdf);
pdfView = findViewById(R.id.pdfView);
pdfView.setVisibility(View.VISIBLE);
loadData();
textView = (TextView) findViewById(R.id.pagenumber);
mprefs = getSharedPreferences("Theme", 0);
nightmode = mprefs.getBoolean("Night", true);
if (nightmode) {
pdfView.fromFile(DocumentsFragment.pdf.get(getIntent().getIntExtra("Position", -1)))
.enableAnnotationRendering(true)
.defaultPage(pagenumber)
.nightMode(false)
.fitEachPage(true)
.onPageChange(new OnPageChangeListener() {
@Override
public void onPageChanged(int page, int pageCount) {
pagenumber = page;
}
})
.pageSnap(true) // snap pages to screen boundaries
.pageFling(true)
.autoSpacing(false)
.spacing(12)
.enableAntialiasing(true)
.pageFitPolicy(FitPolicy.BOTH)
.load();
} else {
pdfView.fromFile(DocumentsFragment.pdf.get(getIntent().getIntExtra("Position", -1)))
.enableAnnotationRendering(true)
.defaultPage(pagenumber)
.nightMode(true)
.fitEachPage(true)
.onPageChange(new OnPageChangeListener() {
@Override
public void onPageChanged(int page, int pageCount) {
pagenumber = page;
}
})
.pageSnap(true) // snap pages to screen boundaries
.pageFling(true)
.autoSpacing(false)
.spacing(12)
.enableAntialiasing(true)
.pageFitPolicy(FitPolicy.BOTH)
.load();
}
loadData();
bottomNavigationView = findViewById(R.id.bottom_nav);
}
@Override
protected void onResume() {
super.onResume();
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.horizontal:
if (ishoriz) {
saveData();
if (nightmode) {
pdfView.fromFile(DocumentsFragment.pdf.get(getIntent().getIntExtra("Position", -1)))
.defaultPage(pagenumber)
.swipeHorizontal(true)
.enableAnnotationRendering(true)
.onPageChange(new OnPageChangeListener() {
@Override
public void onPageChanged(int page, int pageCount) {
pagenumber = page;
}
})
.fitEachPage(true)
.pageSnap(true) // snap pages to screen boundaries
.pageFling(true)
.autoSpacing(false)
.spacing(12)
.nightMode(false)
.enableAntialiasing(true)
.pageFitPolicy(FitPolicy.BOTH)
.load();
ishoriz = false;
setMode();
nightmode = false;
} else {
pdfView.fromFile(DocumentsFragment.pdf.get(getIntent().getIntExtra("Position", -1)))
.defaultPage(pagenumber)
.swipeHorizontal(true)
.enableAnnotationRendering(true)
//.scrollHandle(new DefaultScrollHandle(ViewPdf.this))
.onPageChange(new OnPageChangeListener() {
@Override
public void onPageChanged(int page, int pageCount) {
pagenumber = page;
}
})
.fitEachPage(true)
.pageSnap(true) // snap pages to screen boundaries
.pageFling(true)
.autoSpacing(false)
.spacing(12)
.nightMode(true)
.enableAntialiasing(true)
.pageFitPolicy(FitPolicy.BOTH)
.load();
nightmode = true;
}
} else {
saveData();
if (nightmode) {
pdfView.fromFile(DocumentsFragment.pdf.get(getIntent().getIntExtra("Position", -1)))
.defaultPage(pagenumber)
.swipeHorizontal(false)
.enableAnnotationRendering(true)
//.scrollHandle(new DefaultScrollHandle(ViewPdf.this))
.nightMode(false)
.fitEachPage(true)
.onPageChange(new OnPageChangeListener() {
@Override
public void onPageChanged(int page, int pageCount) {
pagenumber = page;
}
})
.pageSnap(true) // snap pages to screen boundaries
.pageFling(true)
.autoSpacing(false)
.spacing(12)
.enableAntialiasing(true)
.pageFitPolicy(FitPolicy.BOTH)
.load();
ishoriz = true;
setMode();
nightmode = false;
} else {
pdfView.fromFile(DocumentsFragment.pdf.get(getIntent().getIntExtra("Position", -1)))
.defaultPage(pagenumber)
.swipeHorizontal(false)
.enableAnnotationRendering(true)
//.scrollHandle(new DefaultScrollHandle(ViewPdf.this))
.nightMode(true)
.fitEachPage(true)
.onPageChange(new OnPageChangeListener() {
@Override
public void onPageChanged(int page, int pageCount) {
pagenumber = page;
}
})
.pageSnap(true) // snap pages to screen boundaries
.pageFling(true)
.autoSpacing(false)
.spacing(12)
.enableAntialiasing(true)
.pageFitPolicy(FitPolicy.BOTH)
.load();
ishoriz = true;
setMode();
nightmode = true;
}
}
break;
case R.id.dark:
if (nightmode) {
pdfView.fromFile(DocumentsFragment.pdf.get(getIntent().getIntExtra("Position", -1)))
.defaultPage(pagenumber)
.swipeHorizontal(false)
.nightMode(true)
.enableAnnotationRendering(true)
// .scrollHandle(new DefaultScrollHandle(ViewPdf.this))
.fitEachPage(true)
.onPageChange(new OnPageChangeListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onPageChanged(int page, int pageCount) {
pagenumber = page;
}
})
.pageSnap(true) // snap pages to screen boundaries
.pageFling(true)
.autoSpacing(false)
.spacing(12)
.enableAntialiasing(true)
.pageFitPolicy(FitPolicy.BOTH)
.load();
nightmode = false;
setMode();
} else {
pdfView.fromFile(DocumentsFragment.pdf.get(getIntent().getIntExtra("Position", -1)))
.defaultPage(pagenumber)
.swipeHorizontal(false)
.nightMode(false)
.enableAnnotationRendering(true)
// .scrollHandle(new DefaultScrollHandle(ViewPdf.this))
.fitEachPage(true)
.onPageChange(new OnPageChangeListener() {
@Override
public void onPageChanged(int page, int pageCount) {
pagenumber = page;
}
})
.pageSnap(true) // snap pages to screen boundaries
.pageFling(true)
.autoSpacing(false)
.spacing(12)
.enableAntialiasing(true)
.pageFitPolicy(FitPolicy.BOTH)
.load();
nightmode = true;
setMode();
}
break;
public void setMode() {
SharedPreferences mPrefs = getSharedPreferences("Theme", 0);
SharedPreferences.Editor mEditor = mPrefs.edit();
mEditor.putBoolean("Night", nightmode).commit();
}
public void saveData() {
pagenumber = pdfView.getCurrentPage();
sharedPreference = getPreferences(MODE_PRIVATE);
editor = sharedPreference.edit();
editor.putInt("page", pagenumber);
editor.apply();
}
public void loadData() {
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
pagenumber = sharedPreferences.getInt("page", MODE_PRIVATE);
}
@Override
protected void onPause() {
super.onPause();
saveData();
}
}