文字大小不减少

时间:2013-03-11 08:33:10

标签: android textview

我正在研究textview上的文字。我正在尝试添加两个按钮来放大和缩小文本视图中的文本,代码就像这样

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chapter_view);
        String chapter;
        chapter=getIntent().getExtras().getString("ChapterName");
        final StringBuffer buffer = new StringBuffer();
        int id= getResources().getIdentifier(chapter,"raw",getPackageName());     
        try{
            DataInputStream dataIO= new DataInputStream(getResources().openRawResource(id));
            String strLine= null;
            while((strLine = dataIO.readLine())!=null){
                buffer.append(strLine);
                buffer.append("\n");
            }
            dataIO.close();
        }catch(Exception e){

        }
        final TextView tv=(TextView) findViewById(R.id.chapter);
        tv.setText(buffer.toString());

        Button zoomIn = (Button) findViewById(R.id.zoomin);
        zoomIn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                textSize = tv.getTextSize();
                tv.setTextSize((float) (textSize+0.25));   

            }
        });

        Button zoomOut = (Button) findViewById(R.id.zoomout);
        zoomOut.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                textSize = tv.getTextSize();
                tv.setTextSize((float) (textSize-0.25));  
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.chapter_view, menu);
        return true;
    }
}

但我遇到的问题是偶数点击缩小按钮,它仍然增加了文本的字体大小。请帮我解决这个问题。此外,一旦我关闭一个章节并打开另一个章节,文本大小将重置为其默认值。对此有任何解决方案吗?我正在考虑使用namevalue对来解决这个问题。

4 个答案:

答案 0 :(得分:1)

问题在于传递给setTextSize(float size)的单位是缩放像素,而getTextSize()则以像素为单位报告。请尝试使用setTextSize(int unit, float size),将单位设置为TypedValue.COMPLEX_UNIT_PX

答案 1 :(得分:1)

我在我的机器上试过样品。检查下面的代码。您必须使用范围将变量放在正确的位置。

public class MainActivity extends Activity {
    float textSize;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView)findViewById(R.id.textView1);
        textSize = tv.getTextSize();

        Button btnPlus = (Button)findViewById(R.id.button1);
        btnPlus.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                TextView tv = (TextView)findViewById(R.id.textView1);
                Log.v("TextSizeP", String.valueOf(textSize));
                textSize = (float) (textSize+0.25);
                tv.setTextSize(textSize);
                Log.v("TextSizeP", String.valueOf(textSize));
            }
        });

        Button btnMinus = (Button)findViewById(R.id.button2);
        btnMinus.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                TextView tv = (TextView)findViewById(R.id.textView1);
                Log.v("TextSize", String.valueOf(textSize));
                textSize = (float) (textSize-0.25);
                tv.setTextSize(textSize);
                Log.v("TextSize", String.valueOf((float) (textSize-0.25)));
            }
        });
    }

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

}

例如,我在类级别声明了我的textSize变量。单击相关按钮时,textSize变量会增加和减少。

这对我来说很好。

答案 2 :(得分:0)

对于返回默认值的大小,您必须使用共享首选项来保存最后一个文本大小的值。

至于文本大小,为什么不逐个增加值,例如点击zoomOut时的tv.setTextSize(textsize ++) 单击zoomIN时的tv.setTextSize(textsize--)

答案 3 :(得分:0)

public class MainActivity extends Activity {

TextView tv;

Button in,out;

static float textSize;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tv = (TextView) findViewById(R.id.textView1);
    tv.setTextSize(TypedValue.COMPLEX_UNIT_PX,30);
    textSize = tv.getTextSize();

    in = (Button) findViewById(R.id.zoomin);
    out = (Button) findViewById(R.id.zoomout);

    in.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            textSize = (float)(textSize + 2);
            tv.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize);

        }
    });

    out.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            textSize = (float)(textSize - 2);
            tv.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize);

        }
    });

}

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

}