2011-01-06 15 views
11

Buduję aplikację dla systemu Android, która ma wiele tekstowych widoków, które chcę klikać. Próbowałem przypisać właściwości android:clickable="true" i android:onClick="clickHandler" do pojedynczego TextView i kiedy aplikacja odpala clickHandler(View v) Dostaję kliknięty element poprawnie przez v.getId(). Nie podoba mi się określenie, dla każdego TextView, właściwości android:clickable i ... jest coś, co mogę zrobić za pomocą kodu, aby powiedzieć: "wszystkie wyskoki tekstu są klikalne, a kliknięcie jest obsługiwane w clickHandler?"Clickable TextView w Androidzie

Dzięki.

Odpowiedz

16

Można zrobić coś takiego poniżej - w ten sposób wszystkie one mają taką samą Handler:

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

jest ten kod roboczych lub pseudokod? nie mogłem go uruchomić tak, jak jest. ale tks i tak! UPVOTED! :) –

11

użyłem to:

 <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

W tym przykładzie android: textColorLink nic nie robi, chyba że tekst zawiera rzeczywiste hiperłącze. –

+0

Chyba masz rację. Edytowałem odpowiedź. –

3

Hi trzeba użyć Oba poniższy kod:

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

And

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

Poniżej kod pracował dla mnie:

dodatek na 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> 

dodać do TextView:

android:linksClickable="true" 

dodać do aktywności:

about_us.movementMethod = LinkMovementMethod.getInstance() 
+0

To nadal ma ustawienie dla każdego tekstu, którego @Cris chciał uniknąć ... Powinieneś trochę opowiedzieć o moveMethod (ciekawe rozwiązanie) – yakobom

Powiązane problemy