В настоящее время я хочу создать переключатель в моем блоке навигации, чтобы при включении темный режим был включен во всем моем приложении. Однако, хотя первая проблема, с которой я столкнулся, это мой главный экран, здесь уже есть переключатель, как показано здесь введите описание изображения здесь
, но у меня уже есть переключатель, уже включенный в мой навигационный ящик уже есть ли возможность удалить переключатель с главного экрана и убедиться, что единственный переключатель, который у меня был, был бы в блоке навигации, чтобы при включении он включал темный режим для моего приложения?
вот мой код для activity_main:
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
android:background="@color/white"
android:id="@+id/drawer"
tools:context=".MainActivity">
<include
android:layout_height="wrap_content"
android:layout_width="match_parent"
layout="@layout/drawabletoolbar"/>
<include
android:layout_height="wrap_content"
android:layout_width="match_parent"
layout="@layout/content_main"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignParentBottom="false">
<Switch
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/btnSwitch"
android:text=""/>
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/navi_view"
app:menu="@menu/drawable_menu"
app:headerLayout="@layout/drawable_header"
android:layout_gravity="start"
android:fitsSystemWindows="true"/>
</androidx.drawerlayout.widget.DrawerLayout>
вот мой код для файла макета, для которого я создал переключатель в
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<Switch
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:text=""
android:id="@+id/btnSwitch"/>
</LinearLayout>
, а вот мой код MainActivity
package sg.edu.rp.c346.app4thnewspd;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import androidx.appcompat.widget.Toolbar;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.Toast;
import com.google.android.material.navigation.NavigationView;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import sg.edu.rp.c346.app4thnewspd.Model.Articles;
import sg.edu.rp.c346.app4thnewspd.Model.Headlines;
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
SwipeRefreshLayout swipeRefreshLayout;
EditText etQuery;
Button btnSearch;
final String API_KEY = "5353a8d609b4415ab6f449f31d46926a";
Adapter adapter;
List<Articles>articles = new ArrayList<>();
private String query;
Toolbar toolbar;
DrawerLayout drawer;
ActionBarDrawerToggle toggle;
private Switch btnSwitch;
public static final String MYPREFERENCES = "nightModePrefs";
public static final String KEY_ISNIGHTMODE = "isNIghtMode";
SharedPreferences sharedPreferences;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer);
toggle = new ActionBarDrawerToggle(this,drawer,toolbar,R.string.open,R.string.close);
drawer.addDrawerListener(toggle);
toggle.setDrawerIndicatorEnabled(true);
toggle.syncState();
swipeRefreshLayout = findViewById(R.id.swipeRefresh);
recyclerView = findViewById(R.id.recyclerView);
etQuery = findViewById(R.id.etQuery);
btnSearch = findViewById(R.id.btnSearch);
sharedPreferences = getSharedPreferences(MYPREFERENCES, Context.MODE_PRIVATE);
btnSwitch = findViewById(R.id.btnSwitch);
checkNightModeActivated();
btnSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
saveNightModeState(true);
recreate();
}else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
saveNightModeState(false);
recreate();
}
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(this));
final String country = getCountry();
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
retrieveJson("",country,API_KEY);
}
});
retrieveJson("",country, API_KEY);
btnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!etQuery.getText().toString().equals("")){
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
retrieveJson(etQuery.getText().toString(),country,API_KEY);
}
});
retrieveJson(etQuery.getText().toString(),country,API_KEY);
}else{
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
retrieveJson("",country,API_KEY);
}
});
retrieveJson("",country,API_KEY);
}
}
});
}
private void saveNightModeState(boolean nightMode) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(KEY_ISNIGHTMODE,nightMode);
editor.apply();
}
public void checkNightModeActivated(){
if(sharedPreferences.getBoolean(KEY_ISNIGHTMODE, false)){
btnSwitch.setChecked(true);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}else {
btnSwitch.setChecked(false);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}
}
private void restartActivity() {
Intent i = new Intent(getApplicationContext(),MainActivity.class);
startActivity(i);
finish();
}
private String getCountry() {
Locale locale = Locale.getDefault();
String country = locale.getCountry();
return country.toLowerCase();
}
public void retrieveJson(final String query, final String country, final String apiKey){
swipeRefreshLayout.setRefreshing(true);
Call<Headlines>call;
if(!etQuery.getText().toString().equals("")){
call = ApiClient.getInstance().getApi().getSpecificData(query,apiKey);
}else{
call = ApiClient.getInstance().getApi().getHeadLines(country, apiKey);
}
call.enqueue(new Callback<Headlines>() {
@Override
public void onResponse(Call<Headlines> call, Response<Headlines> response) {
if (response.isSuccessful() && response.body().getArticles() != null){
swipeRefreshLayout.setRefreshing(false);
articles.clear();
articles = response.body().getArticles();
adapter = new Adapter(MainActivity.this,articles);
recyclerView.setAdapter(adapter);
}
}
@Override
public void onFailure(Call<Headlines> call, Throwable t) {
swipeRefreshLayout.setRefreshing(false);
Toast.makeText(MainActivity.this, t.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}