Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import android.text.style.ClickableSpan;
- import android.view.View;
- /**
- * Created by nilesh on 22/3/18.
- */
- public abstract class CustomClickableSpan extends ClickableSpan {
- abstract public void onLongClick(View view);
- @Override
- public void onClick(View view) {
- }
- }
- public class MainActivity extends AppCompatActivity {
- TextView editemail;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- editemail = findViewById(R.id.Amount);
- Spannable span = Spannable.Factory.getInstance().newSpannable("Nilesh Rathod");
- CustomClickableSpan customClickableSpan = new CustomClickableSpan() {
- @Override
- public void onLongClick(View view) {
- Toast.makeText(MainActivity.this, "Long Clicked", Toast.LENGTH_SHORT).show();
- }
- };
- span.setSpan(customClickableSpan, 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- SpannableStringBuilder builder = new SpannableStringBuilder();
- builder.append(span);
- builder.append(" : " + "Othet text");
- editemail.setText(span);
- editemail.setMovementMethod(LongClickSpan.getInstance());
- }
- }
- package com.example.nilesh.testapp;
- /**
- * Created by nilesh on 22/3/18.
- */
- import android.text.Layout;
- import android.text.Selection;
- import android.text.Spannable;
- import android.text.method.LinkMovementMethod;
- import android.text.method.MovementMethod;
- import android.view.MotionEvent;
- import android.widget.TextView;
- public class LongClickSpan extends LinkMovementMethod {
- private Long lastClickTime = 0l;
- private int lastX = 0;
- private int lastY = 0;
- @Override
- public boolean onTouchEvent(TextView widget, Spannable buffer,
- MotionEvent event) {
- int action = event.getAction();
- if (action == MotionEvent.ACTION_UP ||
- action == MotionEvent.ACTION_DOWN) {
- int x = (int) event.getX();
- int y = (int) event.getY();
- lastX = x;
- lastY = y;
- int deltaX = Math.abs(x-lastX);
- int deltaY = Math.abs(y-lastY);
- x -= widget.getTotalPaddingLeft();
- y -= widget.getTotalPaddingTop();
- x += widget.getScrollX();
- y += widget.getScrollY();
- Layout layout = widget.getLayout();
- int line = layout.getLineForVertical(y);
- int off = layout.getOffsetForHorizontal(line, x);
- CustomClickableSpan[] link = buffer.getSpans(off, off, CustomClickableSpan.class);
- if (link.length != 0) {
- if (action == MotionEvent.ACTION_UP) {
- if (System.currentTimeMillis() - lastClickTime < 1000)
- link[0].onClick(widget);
- else if (deltaX < 10 && deltaY < 10)
- link[0].onLongClick(widget);
- } else if (action == MotionEvent.ACTION_DOWN) {
- Selection.setSelection(buffer,
- buffer.getSpanStart(link[0]),
- buffer.getSpanEnd(link[0]));
- lastClickTime = System.currentTimeMillis();
- }
- return true;
- }
- }
- return super.onTouchEvent(widget, buffer, event);
- }
- public static MovementMethod getInstance() {
- if (sInstance == null)
- sInstance = new LongClickSpan();
- return sInstance;
- }
- private static LongClickSpan sInstance;
- }
Add Comment
Please, Sign In to add comment