Android 文本大小不减少

Android 文本大小不减少,android,textview,Android,Textview,我正在努力在textview上呈现文本。我试图添加两个按钮来放大和缩小文本视图中的文本,代码如下所示 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chapter_view); String chapter; chapter=getIntent().ge

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

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

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

至于文本大小,为什么不在单击zoomOut时逐个递增该值,例如tv.setTextSize(textsize++)
或tv.setTextSize(textsize--)当单击缩放时

问题是传递到
setTextSize(float size)
的单位以缩放像素为单位,而
getTextSize()
以像素为单位报告。尝试使用
setTextSize(int unit,float size)
代替,将unit设置为
TypedValue.COMPLEX\u unit\u PX

我在我的机器上尝试了一个样本。检查下面的代码。您必须将变量放置在范围的正确位置

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;
}

}
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
变量会增加或减少


这对我来说很好。

你能给我们看看你在哪里申报电视的代码吗。但是我的问题是,如果它通过加加号来增加大小,那么如果加减号,它应该会减小大小。@user2064667您的代码正在工作。我同意您的看法。但是如果我给1,文本的大小会增加很多。这就是我越来越轻率的原因。棘手的是,这种行为将取决于屏幕密度(sp与px的比率变化),这可能就是其他用户在设备上运行代码时没有注意到代码问题的原因。请尝试我编辑的代码。我在这里找到了这种行为的原因: