Can a TextView be selectable AND contain links?

后端 未结 8 732
长情又很酷
长情又很酷 2020-12-08 21:47

I\'ve run into a problem with TextView. I can make it selectable using setTextIsSelectable(true), but when I enable links to be clicked via s

8条回答
  •  误落风尘
    2020-12-08 22:21

    I figured it out. You need to subclass LinkMovementMethod and add support for text selection. It's really unfortunate that it doesn't support it natively. I just overrode the relevant methods using the equivalent ones from the source code for ArrowKeyMovementMethod. I guess that's one benefit of Android being open source!

    public class CustomMovementMethod extends LinkMovementMethod {
        @Override
        public boolean canSelectArbitrarily () {
            return true;
        }
    
        @Override
        public void initialize(TextView widget, Spannable text) {
            Selection.setSelection(text, text.length());
        }
    
        @Override
        public void onTakeFocus(TextView view, Spannable text, int dir) {
           if ((dir & (View.FOCUS_FORWARD | View.FOCUS_DOWN)) != 0) {
               if (view.getLayout() == null) {
                   // This shouldn't be null, but do something sensible if it is.
                   Selection.setSelection(text, text.length());
               }
           } else {
               Selection.setSelection(text, text.length());
           }
        }
    }
    

    To use it, just instantiate it directly, like so:

    textView.setMovementMethod(new CustomMovementMethod());
    

提交回复
热议问题