2013-05-12 18 views
7

Küçük bir Android uygulaması oluşturuyorum. Bir metin görünümünde, tıklamak için birden çok parça içeren bir metin görüntülemek istiyorum. (Her biri farklı bir mesaj göstermelidir)Android Metin görünümünde birden çok tıklanabilir dizge var

Sonunda, tek bir metin görünümünde mutiple açıklıkların nasıl görüntüleneceğini bulmayı başardık, ancak ne yazık ki onClick yöntemleri çalışmaz. Basitçe hiçbir şey olmuyor, bir logcat çizgisi bile değil.

Böyle bir şey var:

SpannableStringBuilder ssb=new SpannableStringBuilder(); 
ssb.append("first second") 

ssb.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(View v) { 
    //Eredmeny2.this is just the context, name of the whole class 
    Toast.makeText(Eredmeny2.this, "first", Toast.LENGTH_LONG).show(); 
    } 
}, 1, 3, 0); 

ssb.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(View v) { 
    Toast.makeText(Eredmeny2.this, "second", Toast.LENGTH_LONG).show(); 
    } 
}, 7, 10, 0); 

TextView t1=new TextView(this); 
t1.setText(ssb); 
... 

metin ince altı çizilir, ama onları tıkladığımda hiçbir şey olmuyor. Bu, ilgili olduğunu düşünmüyorum rağmen, bir TableView bir parçasıdır. Hiçbir şey yapmadığı konusunda bir fikrin var mı? Ne özledim Ya da tamamen farklı bir şekilde yapmalı mıyım?

Şimdiden teşekkürler.

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
    android:id="@+id/ScrollView01" 
    android:background="#FF0000"> 


    <TableLayout 
     android:id="@+id/TableLayout01" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:stretchColumns="0" 
     android:showDividers="middle" 
     android:padding="3dp"> 
    <TableRow 
     android:id="@+id/TableRow01" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/TextView01" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="3dp" 
      android:background="#000000" 
      android:textColor="#FFFFFF" 
      android:padding="6dp" 
      android:text="Hour" 
      android:textSize="20sp" 
      android:textStyle="bold" > 

     </TextView> 
     <TextView android:id="@+id/TextView02" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="20sp" 
      android:textStyle="bold" 
      android:text="Minute" 
      android:padding="6dp" 
      android:textColor="#FFFFFF" 
      android:background="#000000"> 
     </TextView> 

    </TableRow> 

    </TableLayout> 


</ScrollView> 

Ve TextView'un doğrudan kullandığı TextView'un düzeni şudur::

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/tv" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:padding="10dp" 
android:textSize="16sp" 
android:background="#000000" 
android:textIsSelectable="false" 
android:textColor="#FFFFFF"> 
</TextView> 
+0

işlemek için yapmak? – Noundla

+0

Elbette, işte, güncellenen soruda. – skandigraun

+0

bunu değiştir ... android: textIsSelectable = "true" – Noundla

cevap

15

i istediğiniz anladığım kadarıyla


bu bölümü kullanmak istiyorsunuz düzen dosyasına

şudur textview'in birden çok bölümünü tıklanabilir yapmak.

Bu kod benim için çalıştı!

SpannableString ss = new SpannableString("this is a text"); 
ss.setSpan(new myClickableSpan(1),0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
ss.setSpan(new myClickableSpan(2),5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
ss.setSpan(new myClickableSpan(3),8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

mTextView.setText(ss); 
mTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

yalnızca özel ClickableSpan size düzen dosyasını gönderebilir miyim click olayını

public class myClickableSpan extends ClickableSpan{ 

    int pos; 
    public myClickableSpan(int position){ 
     this.pos=position; 
    } 

    @Override 
    public void onClick(View widget) { 
     Toast.makeText(getApplicationContext(), "Position " + pos + " clicked!", Toast.LENGTH_LONG).show(); 
    } 

} 
+0

Teşekkürler. Bu diğer cevaplardan iyidir. –

+0

basit ve zarif cevap, çok yararlı! Zaten onu savundu. – TapanHP

İlgili konular