解决TextView drawableLeft设置图片不能居中

解决TextView drawableLeft设置图片不能居中

今天在项目中遇到个为题,需要在RadioButton 中设置drawableLeft,一开始都很正常,但是最后要把文本内容居中显示,于是问题就来了,不管怎么搞drawableLeft就是不变,始终在左边,不能跟文本内容一起居中,在网上找了好长时间,好多都是自定义TextView的onDraw()移动canvas到中心位置,但是拿来试根本没用,也没有找到原因在哪,,,,,苦思冥想,最终想起SpanString可以混合文本加图片,于是就顺着这个思路去自定义RadioButton. 因为RadioButton继承自Button ,Button又继承自TextView

//因为我是用于RadioGroup,需要选中显示左边的对号,不选择, 去掉文本
 @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

        Log.d(TAG, "onCheckedChanged: isChecked= "+isChecked+" text= "+getText() );


    //当前控件若是选中状态
        if (isChecked){
             //获取图片资源对象,因为我只是简单写写, 所以实际使用中可以自定义属性传过来图片引用,然后在获取 
            drawable = getResources().getDrawable(R.drawable.duihao);
  //设置图片Bounds如果不设置,可能获取不到图片            drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
                // 用span加图片的原理就是把文字的占位符替换成图片
                //所以这里先把 View 的内容设置成一个字符串+我们设置的文本内容
          String text = "span"+getText().toString();

           //先new一个spannableSrtring 对象,传入我们拼接好的字符串
            SpannableString spannableString = new SpannableString(text);

           //new 一个ImageSpan 传入我们的图片对象
            ImageSpan imageSpan = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);
            Log.d(TAG, "onCheckedChanged: preString= "+preString);
            //然后用spannableString.setSpan()来完成字符串替换图片
            spannableString.setSpan(imageSpan,0,"span".lenth()
            , Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
           //设置到TextView中
            setText(spannableString);
    //不是选中状态,则设为原先的内容
        }else{
            // preString是文本原先的文字,我们可以在构造方法中先获取
            setText(preString);
        }
    }

解决TextView drawableLeft设置图片不能居中_第1张图片

你可能感兴趣的:(Android)