缩小不适用于Android中的静态按钮

时间:2016-02-28 16:15:52

标签: android textview

我正在尝试进行缩放(通过增加文本大小,而不是缩放视图)按钮进行文本视图。这是我的代码片段。 (首先我得到mytext_view的文本大小,当我点击按钮时增加一个)

适用于ZoomIn

root

适用于zoomOut

mzoomIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                float x = mytext_view.getTextSize();
                mytext_view.setTextSize((float) (x + 1));
            }
        });

我按预期获得了zoomIn,但当我点击zoomOut按钮时,它也再次放大

MainActivity

mzooomOut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                float x = mytext_view.getTextSize();
                mytext_view.setTextSize((float) (x - 1));
            }
        });

activity_main.xml中

public class MainActivity extends AppCompatActivity {

    private Button mzoomIn;
    private Button mzooomOut;
    private TextView mytext_view;

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

        mzoomIn = (Button) findViewById(R.id.btm_zoomIn);
        mzooomOut = (Button) findViewById(R.id.btm_zoomOut);
        mytext_view = (TextView) findViewById(R.id.mytext_view);
        mzoomIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                float x = mytext_view.getTextSize();
                mytext_view.setTextSize((float) (x + 1));
            }
        });

        mzooomOut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                float x = mytext_view.getTextSize();
                mytext_view.setTextSize((float) (x - 1));
            }
        });
    }

}

当我点击第一个按钮

时,这是我的调试点

首先放大: enter image description here

首先zoomOut: enter image description here

这背后的任何未知事实,帮助!

2 个答案:

答案 0 :(得分:2)

我怀疑+1 -1不足以达到此目的。实际上通过最小sp值增加或减少的正确方法是:

float onepx2sp = 1 * getResources().getDisplayMetrics().scaledDensity;
mytext_view.setTextSize(x + onepx2sp);

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, x + 1f);

答案 1 :(得分:2)

Ugur B 的回答是正确的。如果在调用mtext_view.getTextSize()后调试mtext_view.setTextSize(x + 1)值。您会注意到实际值远大于您设置的值。我记录了这样的值:

            float x = mytext_view.getTextSize();
            Log.e("TEXT_OUT_OLD", String.valueOf(x));
            float new_val = x + 1;
            Log.e("TEXT_OUT_NEW", String.valueOf(new_val));
            mytext_view.setTextSize(new_val);
            Log.e("TEXT_OUT_AFTER", String.valueOf(mytext_view.getTextSize()));

我第一次按放大按钮。我去了这些日志:

04-17 09:45:47.063 22297-22297/com.test.myapplication E/TEXT_OUT_OLD: 21.0
04-17 09:45:47.063 22297-22297/com.test.myapplication E/TEXT_OUT_NEW: 22.0
04-17 09:45:47.063 22297-22297/com.test.myapplication E/TEXT_OUT_AFTER: 33.0

TEXT_OUT_AFTER值每次增加的次数远远超过预期。因此,当您按下“缩小”按钮时,实际上只是将值减小了 1 ,但新的实际值更多。因此,解决方案是使用Uger B的答案和放大,如下所示:

mytext_view.setTextSize(TypedValue.COMPLEX_UNIT_PX, x + 1f);

像这样放大:

 mytext_view.setTextSize(TypedValue.COMPLEX_UNIT_PX, x - 1f);

修改

你获得的价值是不同的,因为它的底层实现。如果你看到setTextSize的源代码。就像这样:

public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

因为,新值是根据TypedValue.COMPLEX_UNIT_SP设置的。它不直接设置传递给方法的值,而是首先根据屏幕密度计算实际SP值,然后分配值。