2016-05-12 2 views
2

Я хочу сделать подстроку textview clickable sothat, и она начнет следующую операцию. Я хочу нажать «... Подробнее» в своем TextView, чтобы открыть подробное описание новостей, есть ли какое-нибудь решение?Как разместить Onclicklistener в подстроке на Textview

TextView description = (TextView) vi.findViewById(R.id.detail); 

я хочу установить onclicklistener на конкретное слово в TextView (здесь описание).

+1

Что вы пытались до сих пор? –

+1

Посмотрите на этот ответ [Spannable text] (http://stackoverflow.com/a/10697453/4804264) –

ответ

1

Попробуйте этот код

public class YourActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 

     ((TextView) findViewById(R.id.textView)).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // Do your stuff 
      } 
     }); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
    } 

} 

Это макет

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" 
     android:text="Do you want to see" /> 

    <TextView 
     android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_toEndOf="@+id/textView2" 
     android:text="...more?" /> 

</RelativeLayout> 

EDIT после комментария

Таким образом, вы должны использовать класс SpannableString и ClickableSpan, что-то вроде этого

SpannableString string = new SpannableString("YourStringHere"); 
ClickableSpan clickHandler = new ClickableSpan() { 
    @Override 
    public void onClick(View v) { 
     //do your stuff here 
    } 
    @Override 
    public void updateDrawState(TextPaint tp) { 
      super.updateDrawState(tp); 
      tp.setUnderlineText(false); 
     } 
}; 

//x and y are the start and end of the clickable substring 
string.setSpan(clickHandler, x, y, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

TextView tv = (TextView) findViewById(R.id.your_text_view); 
tv.setText(string); 
tv.setMovementMethod(LinkMovementMethod.getInstance()); 
tv.textView.setHighlightColor(Color.TRANSPARENT); 

Надеюсь, это поможет! ;-)

+0

вы не понимаете, о чем я говорю. Я не хочу размещать прослушиватель в текстовом виде, что я пытаюсь чтобы разместить слушателя по определенному слову в textView –

1

Вы не дают нам большую часть доказательства работы, но тем не менее, следующие должны помочь вам:

 description.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(this, myActivity.class); 
       startActivity(intent); 
      } 
     }); 

И не забудьте установить в XML вашего TextView в:

android:clickable="true" 

EDIT: Я отредактировал, поэтому мой код теперь заполняет ваши.

+0

, вы не понимаете, что я говорю. Я не хочу помещать прослушиватель в textview, что я пытаюсь разместить слушателя по определенному слову в textView –

+0

Тогда вам нужно сделать 2 (или 3, если вам это нужно), отличается TextViews, на нем установлен onclicklistener, другие (ы) просто отложены. Все дело в небольших изменениях макета в вашем xml. – Amesys

+0

но я не знаю, как добавить textView один за другим ... два textview могут быть расположены в вертикальном или горизонтальном ... Я пробовал эту логику, но не могу получить решение –

1

Возможно, что вы ищете ClickableSpan, вы можете иметь несколько пространств с различным форматированием в своем текстовом виде и иметь только один из пролетов с обратным вызовом при нажатии.

Смежные вопросы