1. 程式人生 > >spannablestring用在fragment中,設定點選監聽無效

spannablestring用在fragment中,設定點選監聽無效

主要程式碼如下

        @Override
        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            TextView textView = (TextView) view.findViewById(R.id.textview);
            String str = "Click me!";
            String txt = str + "Hello world!";
            SpannableString spannableString = new SpannableString(txt);
            ClickableSpan clickableSpan = new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    //Do something.
                    if(isAdded()) {
                        Toast.makeText(getActivity(), "You have clicked!", Toast.LENGTH_LONG).show();
//                        avoidHintColor(widget);
                    }
                }


                @Override
                public void updateDrawState(@NonNull TextPaint ds) {
                    super.updateDrawState(ds);
                    ds.setColor(getResources().getColor(android.R.color.holo_red_dark));
                    ds.setUnderlineText(false);
                    ds.clearShadowLayer();
                }
            };
            spannableString.setSpan(clickableSpan,0,str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            textView.setText(spannableString);
            textView.setMovementMethod(LinkMovementMethod.getInstance());


        }

這樣做好後發現點選設定無效果二設定的顏色卻有效果,然後把程式碼如下改正後,可以了

tv_reap_null = new TextView(context);
tv_reap_null.setGravity(Gravity.CENTER);
tv_reap_null.setPadding(0, 50, 0, 0);
tv_reap_null.setTextColor(Color.parseColor("#676767"));
tv_reap_null.setTextSize(15);
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, 500);
tv_reap_null.setLayoutParams(params);

SpannableString string = new SpannableString(“dddddddddddddddddd”);
string.setSpan(new Click(), 10, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv_reap_null.setText(string);
tv_reap_null.setMovementMethod(LinkMovementMethod.getInstance());//設定點選監聽
mainView.addView(tv_reap_null);