2017-09-26 3 views
0

J'ai un moyen de décider de changer ou non la couleur de la barre de navigation en fonction de l'affichage d'une vue à l'écran. La méthode a été écrite, mais je ne sais pas comment l'appeler. J'appelle cette méthode avec un événement de clic de bouton, mais c'est très dur. Vous voulez qu'il appelle automatiquement, plutôt que de cliquer sur l'appel de l'événement, comment puis-je faire?La barre de navigation Android change automatiquement de couleur en fonction des critères

public class Index extends Activity implements View.OnClickListener{ 
@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.index); 
} 

private void changeNavigationColour(View view){ 
     Point p = new Point(); 
     getWindowManager().getDefaultDisplay().getSize(p); 
     int[] loacation = new int[2]; 
     view.getLocationInWindow(loacation); 
     Toast.makeText(this, Arrays.toString(loacation),Toast.LENGTH_SHORT).show(); 
     Rect ivRect = new Rect(view.getLeft(),view.getTop(),view.getRight(),view.getBottom()); 
     LinearLayout head = (LinearLayout) findViewById(R.id.index_head); 
     if(view.getLocalVisibleRect(ivRect)){ 
      //Change the navigation color 
      head.setBackgroundColor(getResources().getColor(R.color.transparent)); 
     }else { 
      //Change the navigation color 
      head.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 
     } 
} 
+0

après ce que vous avez essayé jusqu'à présent pour vous aider à comprendre le problème –

+0

montrez-nous votre code. –

+0

vous devez être plus clair sur ce changement de «critères» .. qu'est-ce que c'est? comment tu l'as obtenu? –

Répondre

0

Sur la base de votre commentaire, il vous pouvez utiliser un PhoneStateListener

public class Index extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.index); 

     TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
     telephonyManager.listen(new myPhoneStateChangeListener(),PhoneStateListener.LISTEN_CALL_STATE); 
    } 

    public class myPhoneStateChangeListener extends PhoneStateListener { 
     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 
      super.onCallStateChanged(state, incomingNumber); 
      // call changeNavigationColour based on the state 

     } 
    } 
} 

Vous vous semble besoin d'appeler changeNavigationColour(View view) en fonction d'un état appel téléphonique

Pour cela aussi besoin d'avoir dans votre manifeste

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>