TextView字体更改

时间:2012-11-30 10:33:38

标签: android widget textview

在我的应用程序中,如果用户点击了imageview,则textview的字体大小应该更改。如果用户再次点击同一个imageview,则文本应设置为以前的字体。

在我的adpater课程中:

 public View getView(int position, View convertView, ViewGroup parent) 
    {
        this.Position=position;
        // TODO Auto-generated method stub

        rowView = LayoutInflater
                 .from(parent.getContext())
                 .inflate(R.layout.newsdescriptionrow, null);

          TextView prevnews=(TextView)rowView.findViewById(R.id.prevnews);
          TextView nextnews=(TextView)rowView.findViewById(R.id.nextnews);

          ImageView img=(ImageView)rowView.findViewById(R.id.fontimage);
          img.setImageResource(mImageIds);

 img.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                if(!fontselection)
                {
                    font=20;
                    fontselection = true;

                }
                else
                {
                    System.out.println("inside else..");
                    font = 10;
                    fontselection = false;

                }
//              font=20;
                TextView textView = (TextView) rowView
                        .findViewById(R.id.name_Desclabel);
                textView.setText(body[Position]);
                System.out.println("fontsasss="+font);
                textView.setTextSize(font);
            }
        });

我哪里错了?

2 个答案:

答案 0 :(得分:1)

您可以使用多种方式中的一种来实现。

//为了提高效率,请将其从侦听器中删除

TextView textView = (TextView) rowView.findViewById(R.id.name_Desclabel);

//解决方案1 ​​

img.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                //1. get the font size  
                float fontSize = textView.getTextSize();
                //change the font size
                if(fontSize == 10){
                    fontSize=20;
                }else if(fontSize==20){
                    fontSize=10;
                }

                textView.setText(body[Position]);
                System.out.println("fontsasss="+font);
                //3. set the new font size
                textView.setTextSize(fontSize);
            }
        });

//解决方案2

boolean isFontChanged=false;
textView.setTextSize(/*10 OR 20 set initial size here*/);


img.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View arg0) {

                    //1. change the font size
                    if(isFontChanged){
                        fontSize=20; //initial
                    }else {
                        fontSize=10; //new changed size
                    }

                    textView.setText(body[Position]);
                    System.out.println("fontsasss="+font);
                    //2. set the new font size
                    textView.setTextSize(fontSize);

                    //3. for future 
                   isFontChanged = !isFontChanged;
                }
            });

<强>建议 1.在多次调用的函数(即getView)中创建一个Anonymous类永远不是一个好主意    相反,您可以在适配器中实现OnClickListener并使用

保存疼痛
   img.setOnClickListener(this);

2。如果这是你的完整getView功能,我认为它是高度未经优化的。请参阅此example

答案 1 :(得分:0)

这里

方法TextView.setTextSize(int unit,int size);有两个参数。

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,9);

http://developer.android.com/reference/android/util/TypedValue.html#COMPLEX_UNIT_DIP

http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29