2

我正在努力在 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;
    }
}

但是我遇到的问题是即使单击缩小按钮,它仍然会增加文本的字体大小。请帮我解决这个问题。同样,一旦我关闭一章并打开另一章,文本大小将重置为其默认值。有没有这方面的解决方案。我正在考虑为此解决方案使用名称值对。

4

4 回答 4

1

问题是传递给的单位setTextSize(float size)是按比例缩放的像素,而getTextSize()报告是像素。尝试setTextSize(int unit, float size)改用,将单位设置为TypedValue.COMPLEX_UNIT_PX.

于 2013-03-11T09:00:57.987 回答
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当点击相关按钮时,变量会增加和减少。

这对我来说很好。

于 2013-03-11T09:08:09.210 回答
0

至于恢复到默认大小的大小,您将不得不使用共享首选项来保存最后一个文本大小的值。

至于文本大小,为什么不将值一一递增,例如单击 zoomOut 时的 tv.setTextSize(textsize++) 或单击 zoomIN 时的 tv.setTextSize(textsize--)

于 2013-03-11T08:51:54.873 回答
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;
}

}
于 2013-03-11T08:55:10.830 回答