Ramotion / paper-onboarding-android

:octocat: PaperOnboarding is a material design slider made by @Ramotion
https://www.ramotion.com/paper-onboarding-android/
MIT License
2.56k stars 421 forks source link

how to change text color and text font in android #60

Open hmody23 opened 2 years ago

hmody23 commented 2 years ago

how to change text color and text font in android??

Puesto4It commented 3 weeks ago

Yo lo conseguí de esta forma. Haces lo que te indica la libreria: PaperOnboardingPage scr1 = new PaperOnboardingPage("Hotels", "All hotels and hostels are sorted by hospitality rating", Color.parseColor("#678FB4"), R.drawable.hotels, R.drawable.key); PaperOnboardingPage scr2 = new PaperOnboardingPage("Banks", "We carefully verify all banks before add them into the app", Color.parseColor("#65B0B4"), R.drawable.banks, R.drawable.wallet); PaperOnboardingPage scr3 = new PaperOnboardingPage("Stores", "All local stores are categorized for your convenience", Color.parseColor("#9B90BC"), R.drawable.stores, R.drawable.shopping_cart);

ArrayList elements = new ArrayList<>(); elements.add(scr1); elements.add(scr2); elements.add(scr3);

PaperOnboardingFragment onBoardingFragment = PaperOnboardingFragment.newInstance(elements);

Despues haces esto: // Listener para detectar cambios de página onBoardingFragment.setOnChangeListener(new PaperOnboardingOnChangeListener() { @Override public void onPageChanged(int oldElementIndex, int newElementIndex) { // Cambiar el color del texto de la nueva página View currentPageView = onBoardingFragment.getView(); // Obtén la vista actual del fragmento if (currentPageView != null) { changeTextColor(currentPageView, Color.RED); // Cambia el color del texto } } });

que eso lo que hará es cambiar el texto cada vez que cambies de página, pero la primera no se cambiará el color por lo que tienes que hacer lo siguiente, pones lo que sigue que te indica la libreria: FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.fragment_container, onBoardingFragment); fragmentTransaction.commit();

y seguido haces esto: // Usar ViewTreeObserver para esperar hasta que se dibuje la vista view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { view.getViewTreeObserver().removeOnGlobalLayoutListener(this);

            System.out.println("Las vistas han sido creadas. Ahora puedes intentar cambiar colores.");

            // Cambiar el color del texto a rojo, por ejemplo
            changeTextColor(view, Color.RED);
        }

    });

y te creas el siguiente método: private void changeTextColor(View view, int color) { // Verifica si es un TextView y no un Button if (view instanceof TextView && !(view instanceof Button)) { TextView textView = (TextView) view; textView.setTextColor(color); // Cambia el color del texto }

    // Verificar si es un ViewGroup
    if (view instanceof ViewGroup) {
        ViewGroup group = (ViewGroup) view;
        for (int i = 0; i < group.getChildCount(); i++) {
            // Llamada recursiva para los hijos
            changeTextColor(group.getChildAt(i), color);
        }
    }
} 

en mi caso tengo esta condición !(view instanceof Button) para que no se aplique a un botón que he agregado.

Espero que os sirva de ayuda!!