2017-08-10 18 views
0

J'ai créé un textview dynamiquement dans android. Lorsque je clique sur le texte, la couleur passe du blanc à l'orange, mais ce que je veux, c'est que lorsque je clique sur un autre texte, l'autre texte qui a été changé en orange redeviendra blanc. Ceci est le code pour créer le textview:Modifier la couleur dans le texte dynamique pour chaque clic dans android

for (int i = 1; i <= n; i++) { 

     final TextView mPageNumber = new TextView(getActivity()); 
     mPageNumber.setText("" + i); 
     mPageNumber.setId(Integer.parseInt(String.valueOf(i))); 
     mPageNumber.setTextColor(getResources().getColor(R.color.colorWhite)); 
     mPageNumber.setPadding(60,30,60,30); 
     final int id_ = mPageNumber.getId(); 
     LinearLayout layout = (LinearLayout) getView().findViewById(R.id.pagination); 
     layout.setBackgroundResource(R.color.colorPrimary); 
     layout.addView(mPageNumber); 

OnClickListener

mPageNumber.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (toastMessage!= null) { 
        toastMessage.cancel(); 
       } 

       toastMessage = Toast.makeText(getActivity().getApplicationContext(), "Button with id =" + id_ + 
         " is clicked",Toast.LENGTH_SHORT); 
       current = id_; 
       toastMessage.show(); mPageNumber.setTextColor(getResources().getColor(R.color.colorOrange)); 

Répondre

0

Vous pouvez parcourir tout l'enfant dans la mise en page et définissez la couleur comme étant blanche puis la couleur sélectionnée comme orange comme ceci dans l'exemple ci-dessous.

LinearLayout layout; 
private void setAllTextColorAsWhite() { 
    if(layout == null) { 
     return; 
    } 

    int childCount = layout.getChildCount(); 

    for (int i = 0; i < childCount; i++) { 
     TextView textView = (TextView) layout.getChildAt(i); 
     textView.setTextColor(getResources().getColor(R.color.white)); 
    } 
} 

public void setTextViews() { 
    layout = (LinearLayout) getView().findViewById(R.id.pagination); 

    layout.removeAllViews(); 

    for (int i = 1; i <= n; i++) { 

     final TextView mPageNumber = new TextView(getActivity()); 
     mPageNumber.setText("" + i); 
     mPageNumber.setId(Integer.parseInt(String.valueOf(i))); 
     mPageNumber.setTextColor(getResources().getColor(R.color.colorWhite)); 
     mPageNumber.setPadding(60, 30, 60, 30); 
     final int id_ = mPageNumber.getId(); 

     layout.setBackgroundResource(R.color.colorPrimary); 
     layout.addView(mPageNumber); 

     mPageNumber.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (toastMessage!= null) { 
        toastMessage.cancel(); 
       } 

       toastMessage = Toast.makeText(getActivity().getApplicationContext(), "Button with id =" + id_ + 
         " is clicked",Toast.LENGTH_SHORT); 
       current = id_; 
       toastMessage.show(); 

       setAllTextColorAsWhite(); 

       mPageNumber.setTextColor(getResources().getColor(R.color.colorOrange)); 
      } 
     }); 
    } 
} 
+0

Nice! Merci beaucoup! Il fonctionne comme un charme! C'est exactement ce dont j'ai besoin: D – wizzone

0

Vous pouvez en utilisant comme ceci: ~

mPageNumber.setOnTouchListener(new View.OnTouchListener() 
{ 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) 
    { 
     switch (motionEvent.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       textView.setTextColor(Color.RED); 
       break; 
      case MotionEvent.ACTION_UP: 
       textView.setTextColor(Color.BLUE); 
       break; 
     } 
     return false; 
    } 
}); 
0

vous devez faire comme ce

for (int i = 1; i <= n; i++) { 

    final TextView mPageNumber = new TextView(getActivity()); 
    mPageNumber.setText("" + i); 
    mPageNumber.setId(Integer.parseInt(String.valueOf(i))); 
    mPageNumber.setTextColor(getResources().getColor(R.color.colorWhite)); 
    mPageNumber.setPadding(60,30,60,30); 
    mPageNumber.setOnClickListener(this); 
    final int id_ = mPageNumber.getId(); 
    LinearLayout layout = (LinearLayout) getView().findViewById(R.id.pagination); 
    layout.setBackgroundResource(R.color.colorPrimary); 
    layout.addView(mPageNumber); 

maintenant vous devez implémenter la méthode onclick comme cet heureux

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.1: 
      //code for click textview. 
      break; 
    } 
} 

codage.

0

Le plus simple est d'enregistrer la référence TextView à un tableau, comme ceci:

final TextView[] mPageNumbers; 
for (int i = 1; i <= n; i++) { 
    mPageNumbers[i] = new TextView(getActivity()); 
    mPageNumber[i].setText("" + i); 
. 
. 
. 
for (int i=0; i<mPageNumbers.length; i++) { 
    if (view.getId() == mPageNumbers[i].getId()) { 
    mPageNumber.setTextColor(getResources().getColor(R.color.colorOrange)); 
     } else { 
     mPageNumber.setTextColor(getResources().getColor(R.color.colorWhite)); 
     } 
    } 

Et à la fin, vous bouclez les références de TextView, puis définissez la couleur manuellement, si l'identifiant est le même , définissez orange, si différent (signifie autres textViews), définissez blanc.