2011-01-06 4 views
11

Je construis une application Android qui a beaucoup de nombreux TextViews que je veux être cliquable. J'ai essayé d'assigner les propriétés android:clickable="true" et android:onClick="clickHandler" au seul TextView et lorsque l'application tire le clickHandler(View v) je reçois l'élément cliqué correctement par v.getId(). Ce que je n'aime pas est de définir, pour chaque TextView, les propriétés android:clickable et ... est-ce qu'il y a quelque chose que je peux faire par le code pour dire: "tous les textviews sont cliquables et le clic est géré dans clickHandler?"TextView Cliquable dans Android

Merci.

Répondre

16

Vous pouvez faire quelque chose comme ça ci-dessous - cette façon, ils ont tous le même gestionnaire:

public class sticks extends Activity implements View.OnTouchListener { 
    private TextView tv1; 
    private TextView tv2; 
    private TextView tv3; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tv1 = (TextView) findViewById(R.id.tv1); 
    tv2 = (TextView) findViewById(R.id.tv2); 
    tv3 = (TextView) findViewById(R.id.tv3); 

    // bind listeners 
    tv1.setOnTouchListener(this); 
    tv2.setOnTouchListener(this); 
    tv3.setOnTouchListener(this); 

    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    // check which textview it is and do what you need to do 

    // return true if you don't want it handled by any other touch/click events after this 
    return true; 
    } 
} 
+0

est le code de travail ou pseudo-code? Je ne pouvais pas le faire fonctionner tel quel. mais tks quand même! UPVOTED! :) –

11

J'utilisé ceci:

 <TextView 
      android:id="@+id/txtTermsConditions" 
      android:layout_width="180dp" 
      android:layout_height="50dp" 
      android:layout_marginLeft="20dp" 
      android:layout_marginTop="10dp" 
      android:onClick="onTermConditions" 
      android:clickable="true" 
      android:text="Terms and Conditions" 
      android:textColor="@color/blue" /> 
+1

Dans cet exemple, android: textColorLink ne fait rien, sauf si le texte contient un lien hypertexte réel. –

+0

Je suppose que vous avez raison. J'ai édité la réponse. –

3

Salut Vous devez utiliser les deux ci-dessous le code:

<TextView 
     android:id="@+id/reg_text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/login_btn" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="10dp" 
     android:clickable="true" 
     android:text="Are you now need to create an account?" 
     android:textColor="#ff0000ff" 
     android:textSize="15sp" 
     /> 

Et

private TextView tv1; 
     tv1= (TextView)findViewById(R.id.reg_text); 
    tv1.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View arg0, MotionEvent arg1) { 
      // TODO Auto-generated method stub 
      ProgressDialog progressBar = ProgressDialog.show(MainActivity.this, "Title", 
        "شکیبا باشید!"); 
      progressBar.setCancelable(true); 
      Intent i = new Intent(getApplicationContext(), Register.class); 
      startActivity(i); 
      return false; 
     } 
    }); 
0

Ci-dessous le code a fonctionné pour moi:

add à strings.xml:

<string name="about_us"><font fgcolor="#039BE5">\"THIS IS SPARTA! more info at" <font fgcolor="#000000"><a href="https://google.com/">google.com</a></font> 
</string> 

ajouter à TextView:

android:linksClickable="true" 

ajouter à l'activité:

about_us.movementMethod = LinkMovementMethod.getInstance() 
+0

Cela a toujours l'action de réglage pour chaque textview, que @Cris voulait éviter ... Vous devriez élaborer un peu sur motionMethod (une solution intéressante) – yakobom