2016-06-25 23 views
6

ho trovato alcune soluzioni per cambiare il colore del filatore su iOS:Cordova splash screen a colori cambiamento filatore su Android

How to show custom Splash Screen Spinner (i.e spinner with white color) in iOS phonegap app?

Change Color of Splash Screen Spinner in cordova-plugin-splashscreen

... e un paio di altre questioni più o meno correlato, ma nulla per cambiare il colore della rotella di caricamento della schermata iniziale su Android. Il mio splash screen è blu, e lo spinner è azzurro, non proprio visibile, e vorrebbe cambiarlo in bianco.

Sto utilizzando cordova-plugin-splashscreen da https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/index.html e ho creato la mia app localmente utilizzando cordova build android e sono riuscito a distribuire il mio codice sul mio dispositivo. Ma nessuna fortuna nel cambiare il colore di quel filatore.

penso che il codice da modificare è in platforms/android/src/org/apache/cordova/splashscreen/Splashscreen.java, quando si crea l'oggetto ProgressBar:

private void spinnerStart() { 
    cordova.getActivity().runOnUiThread(new Runnable() { 
     public void run() { 
      spinnerStop(); 

      spinnerDialog = new ProgressDialog(webView.getContext()); 
      spinnerDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 
       public void onCancel(DialogInterface dialog) { 
        spinnerDialog = null; 
       } 
      }); 

      spinnerDialog.setCancelable(false); 
      spinnerDialog.setIndeterminate(true); 

      RelativeLayout centeredLayout = new RelativeLayout(cordova.getActivity()); 
      centeredLayout.setGravity(Gravity.CENTER); 
      centeredLayout.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

      /* The following line here: */ 
      ProgressBar progressBar = new ProgressBar(webView.getContext()); 
      RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); 
      progressBar.setLayoutParams(layoutParams); 

      centeredLayout.addView(progressBar); 

      spinnerDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
      spinnerDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

      spinnerDialog.show(); 
      spinnerDialog.setContentView(centeredLayout); 
     } 
    }); 
} 

non so Android di programmazione applicazioni (anche se ho trovato molti esempi, io non sono a conoscenza di come costruire vista in xml da file di risorse, ecc ... e difficilmente ho trovato alcuna documentazione che descrivesse come aggiungere risorse ai progetti cordova).

Io uso cordova in modo che non debba ancora costruire app native native per Android, e senza quella formazione, questa parte è diventata piuttosto frustrante - qualcuno ha ancora trovato una soluzione?

+0

forse relativi a https://developer.android.com/reference/android/widget/ProgressBar.html#setProgressTintList(android.content.res.ColorStateList) - io non so come utilizzare ColorStateList ed è correlato ai file di risorse xml. –

risposta

4

customspinner.xml

<?xml version="1.0" encoding="utf-8"?> 
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" 
    android:toDegrees="360"> 
    <shape android:shape="ring" android:innerRadiusRatio="3" 
     android:thicknessRatio="8" android:useLevel="false"> 
     <size android:width="76dip" android:height="76dip" /> 
     <gradient android:type="sweep" android:useLevel="false" 
      android:startColor="yourcolor" 
      android:endColor="yourcolor" 
      android:angle="0" 
      /> 
    </shape> 
</rotate> 

Salva nella cartella drawable.

Poi aggiungere questo nel codice Java

progressBar.setIndeterminateDrawable(R.drawable.customspinner); 
          or 
progressBar.setBackground(R.drawable.customspinner); 
+0

Ciao Mohammed, grazie mille per la risposta. Posso sapere a quale cartella ti stai riferendo? 'piattaforme/android/res'? Se sì, quale nome dovrebbe avere la mia cartella, semplicemente "disegnabile"? Modifica: BTW, R non definito, Splashscreen.java è definito come: 'public SplashScreen estende CordovaPlugin' –

+0

' piattaforme/android/src/org/apache/cordova/splashscreen/SplashScreen.java: 353: errore: pacchetto R non esiste per la precisione –

+2

SUCCESSO! Aggiungi a SplashScreen.java: 'import android.graphics.drawable.Drawable; import android.content.res.Resources; ' ' Resources activityRes = cordova.getActivity(). GetResources(); int spinnerResId = activityRes.getIdentifier ("customspinner", "drawable", cordova.getActivity(). GetPackageName()); CustomSpinner disegnabile = activityRes.getDrawable (spinnerResId); ' ' ProgressBar progressBar = new ProgressBar (webView.getContext()); progressBar.setIndeterminateDrawable (customSpinner); ' Il nome della cartella è effettivamente' drawable' sotto 'platforms/android/res'. –

4

aggiungere questa riga nel file config.xml di progetto.

<preference name="TopActivityIndicator" value="white"/>