我正在尝试进行缩放(通过增加文本大小,而不是缩放视图)按钮进行文本视图。这是我的代码片段。 (首先我得到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));
}
});
}
}
当我点击第一个按钮
时,这是我的调试点这背后的任何未知事实,帮助!
答案 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
值,然后分配值。