2 votes

Comment placer un Onclicklistener dans une sous-chaîne d'un Textview ?

Je veux que la sous-chaîne d'une fenêtre de texte soit cliquable afin de lancer l'activité suivante. Je veux cliquer sur "...Plus" dans mon TextView pour ouvrir la description détaillée de la nouvelle, y a-t-il une solution ?

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

Je veux mettre onclicklistener sur un mot spécifique dans TextView (description ici).

1voto

michoprogrammer Points 510

Essayez ce code

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();
    }

}

Voici votre disposition

<?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 après commentaire

Il faut donc utiliser la classe SpannableString et ClickableSpan, comme ceci

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);

J'espère que cela vous aidera ! ;-)

1voto

Amesys Points 360

Vous ne nous donnez pas beaucoup de preuves de votre travail, mais ce qui suit devrait quand même vous aider :

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

Et n'oubliez pas de définir le XML de votre TextView :

android:clickable="true"

EDIT : J'ai modifié mon code pour qu'il corresponde au vôtre.

1voto

Xavier Falempin Points 979

Ce que vous cherchez semble être ClickableSpan vous pouvez avoir plusieurs span avec des mises en forme différentes dans votre textview et n'avoir qu'un seul span avec un callback au clic.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X