2011-01-06 14 views
11

Sto costruendo un'app per Android che ha molte molte TextView che desidero essere selezionabili. Ho provato ad assegnare le proprietà android:clickable="true" e android:onClick="clickHandler" al singolo TextView e quando l'app attiva lo clickHandler(View v) ottengo correttamente l'elemento selezionato tramite v.getId(). Quello che non mi piace è definire, per ogni TextView, le proprietà android:clickable e ... c'è qualcosa che posso fare tramite codice per dire: "tutte le visualizzazioni di testo sono selezionabili e il clic è gestito in clickHandler?"TextView cliccabile in Android

Grazie.

risposta

16

Si potrebbe fare qualcosa di simile qui sotto - in questo modo tutti hanno lo stesso gestore:

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

è questo codice di lavoro o di pseudo? non riuscivo a farlo funzionare come è. ma tks comunque! Upvoted! :) –

11

ho usato questo:

 <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

In questo esempio, android: textColorLink non fa nulla, a meno che il testo contenga un collegamento ipertestuale reale. –

+0

Immagino che tu abbia ragione. Ho modificato la risposta. –

3

Hi è necessario utilizzare sia di seguito Codice:

<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" 
     /> 

E

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

Di seguito il codice ha funzionato per me:

add to 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> 

aggiungi al TextView:

android:linksClickable="true" 

aggiungere all'attività:

about_us.movementMethod = LinkMovementMethod.getInstance() 
+0

Questo ha ancora l'impostazione per ogni textview, che @Cris voleva evitare ... Dovresti elaborare un po 'di movimentoMethod (una soluzione interessante) – yakobom