码迷,mamicode.com
首页 > 移动开发 > 详细

android中TextView 添加ClickableSpan后点击选中文字背景问题

时间:2015-01-24 15:48:22      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

TextView中的setHighlightColor(int color)用于设置选中文字背景色高亮显示。

 比如以下:

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FrameLayout frameLayout = new FrameLayout(this);
        setContentView(frameLayout);
        frameLayout.setId(R.id.container);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            return rootView;
        }

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

        }

        private void avoidHintColor(View view){
            if(view instanceof TextView)
                ((TextView)view).setHighlightColor(getResources().getColor(android.R.color.transparent));
        }
    }
}        

 

会出现文字选中出现淡绿色的背景色现象。如下图1.1。ds.setColor()设定的是span超链接的文本颜色,而不是点击后的颜色,点击后的背景颜色(HighLightColor)属于TextView的属性,Android4.0以上默认是淡绿色,低版本的是黄色。

   解决方法就是通过

((TextView)view).setHighlightColor(getResources().getColor(android.R.color.transparent));方法重新设置文字背景为透明色。

修改后的结果如图1.2。

图1.1:

技术分享

 

 

图1.2:

技术分享

 

android中TextView 添加ClickableSpan后点击选中文字背景问题

标签:

原文地址:http://www.cnblogs.com/sxzheng/p/4245873.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!