Android DarkMode textColor не изменяется внутри файла строки RecyclerView - PullRequest
1 голос
/ 24 октября 2019

Я установил вид рециркулятора и установил один textview с простым текстом в файле строк RecyclerView.

Я установил fragment в соответствии с вкладкой, значит, я использовал BottomNavigationViewи есть один fragment, который содержит RecyclerView.

И я установил android:forceDarkAllowed="true" внутри XML-файла.

Я применил тему DayNight.

Цвет textview, который находится внутри xml фрагмента, может быть обновлен в соответствии с темной и светлой темой, но элемент адаптера (используется для RecyclerView), который содержит textview, который не изменилсяцвет.

Pref. XML:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:padding="@dimen/margin_medium"
    android:forceDarkAllowed="true"
    android:orientation="vertical">

    <TextView
        style="?attr/textAppearanceHeadline6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/margin_medium"
        android:textColor="@color/txt"
        android:text="@string/preferences"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rvList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

Фрагмент:


public class PreferencesFragment extends Fragment {

    static final String TAG = "PreferencesFragment";

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_preferences, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        RecyclerView rvList = view.findViewById(R.id.rvList);

        rvList.setLayoutManager(new LinearLayoutManager(DarkThemeApplication.context, RecyclerView.VERTICAL, false));
        rvList.setAdapter(new RVListAdapter());
    }

    class RVListAdapter extends RecyclerView.Adapter<RVListAdapter.ViewHolder> {

        @NonNull
        @Override
        public RVListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
            int viewType) {
            return new ViewHolder(LayoutInflater
                .from(DarkThemeApplication.context).inflate(R.layout.row_txt, parent, false));
        }

        @Override
        public void onBindViewHolder(@NonNull RVListAdapter.ViewHolder holder, int position) {

        }

        @Override
        public int getItemCount() {
            return 50;
        }

        class ViewHolder extends RecyclerView.ViewHolder {
            public ViewHolder(@NonNull View itemView) {
                super(itemView);
            }
        }
    }

}

Файл строки XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:forceDarkAllowed="true">

    <TextView
        android:id="@+id/switch1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/txt"
        android:layout_margin="@dimen/margin_small"
        android:text="asdasdasdas" />

</LinearLayout>

1 Ответ

1 голос
/ 24 октября 2019
LayoutInflater
            .from(DarkThemeApplication.context).inflate(R.layout.row_txt, ...

Используйте Activity контекст, а не Application для раздувания ваших представлений.

Ваш адаптер является нестатическим внутренним классом в Fragmentтак что вы можете просто заменить DarkThemeApplication.context на requireActivity().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...