用于编辑TextView大小的按钮,样式

时间:2017-11-05 09:07:18

标签: java android

我想制作按钮来调整文字。有一些按钮可以使TextView在斜体和粗体之间变大,变小,来回。

我想编辑名为“text”的TextView

在下面的代码中,当我点击“butBig”或“butSmall”按钮时,两个按钮都做同样的事情,它使我的文字大小增加但不是5,它变得非常大。当我再次点击任一按钮时,TextView会消失,因为它对于框架来说太大了。

butBig.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            float size = text.getTextSize();
            text.setTextSize(size + 5.0F);

        }
    });

    butSmall.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            float size = text.getTextSize();
            text.setTextSize(size - 5.0F);

        }
    });

对于Italic和Bold,我的代码在这里工作,但有时当我点击其中任何一个按钮时,应用程序无缘无故崩溃..

butItalic.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if (text.getTypeface().getStyle() == Typeface.BOLD) {

                text.setTypeface(null, Typeface.BOLD_ITALIC);

            } else if (text.getTypeface().getStyle() == Typeface.ITALIC) {

                text.setTypeface(null, Typeface.NORMAL);

            } else if (text.getTypeface().getStyle() == Typeface.NORMAL) {

                text.setTypeface(null, Typeface.ITALIC);

            } else if (text.getTypeface().getStyle() == Typeface.BOLD_ITALIC) {

                text.setTypeface(null, Typeface.BOLD);

            }


        }
    });


    butBold.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if (text.getTypeface().getStyle() == Typeface.ITALIC) {

                text.setTypeface(null, Typeface.BOLD_ITALIC);

            } else if (text.getTypeface().getStyle() == Typeface.BOLD) {

                text.setTypeface(null, Typeface.NORMAL);

            } else if (text.getTypeface().getStyle() == Typeface.NORMAL) {

                text.setTypeface(null, Typeface.BOLD);

            } else if (text.getTypeface().getStyle() == Typeface.BOLD_ITALIC) {

                text.setTypeface(null, Typeface.ITALIC);

            }


        }
    });

请帮我解决这个问题

谢谢

编辑:这是我的logcat:)

  

---------崩溃的开始   11-05 05:34:17.581 2416-2416 / com.example.textadjust E / AndroidRuntime:FATAL EXCEPTION:main                                                                        处理:com.example.textadjust,PID:2416                                                                        java.lang.NullPointerException:尝试在空对象引用上调用虚方法'int android.graphics.Typeface.getStyle()'                                                                            at com.example.textadjust.MainActivity $ 3.onClick(MainActivity.java:57)                                                                            在android.view.View.performClick(View.java:5198)                                                                            在android.view.View $ PerformClick.run(View.java:21147)                                                                            在android.os.Handler.handleCallback(Handler.java:739)                                                                            在android.os.Handler.dispatchMessage(Handler.java:95)                                                                            在android.os.Looper.loop(Looper.java:148)                                                                            在android.app.ActivityThread.main(ActivityThread.java:5417)                                                                            at java.lang.reflect.Method.invoke(Native Method)                                                                            在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)                                                                            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)   11-05 05:34:19.734 2416-2416 /? I /处理:发送信号。 PID:2416 SIG:9

1 个答案:

答案 0 :(得分:0)

到目前为止,您应该知道的是使用以下方法进行的TextSize的大小:

text.setTextSize(size + 5.0F);

尺寸单位是Scalled Pixels,如果您想知道或想要使用dp中的尺寸,请将像素更改为dp

public int getDp(int px) {
    DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
    int dp = Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
    return dp;
}

在你的clas中添加此方法!但另外(我建议)您可以使用以下方法:

setTextSize(int unit, float size);

这里的参数int unit我可以采用this stackoverflow answer给出的值:

TypedValue.COMPLEX_UNIT_PX   //Pixels

TypedValue.COMPLEX_UNIT_SP   //Scaled Pixels

TypedValue.COMPLEX_UNIT_DIP  //Device Independent Pixels

对于另一个问题,为崩溃添加一些日志!弄清楚可能是什么错误,我将编辑我的答案来添加!!

但我的建议到目前为止减少了条件并使用了switch代替ifelse,并确保TextView在调用这些方法之前有文本。添加一些日志以确保最新进展!

编辑崩溃

正如我猜测崩溃的原因是NullPointerException。这可能是由TextView变量为null引起的。可能的原因是它未在onCreate()中分配,或者在分配时没有显示文本(我猜)。



因为您要在整个类中使用TextView将其声明为类变量,如果onCreateActivity onCreateView,则将其分配为Fragment: 在任何方法之前就在你的课堂内:

private TextView text;

然后在onCreate内将其指定为:

text=(TextView)findViewById(R.id.your_text_view_id); //Replace with a real id

并在Typefacexml代码中设置默认文字或java。现在,您可以在类中的任何位置访问TextView变量null

作为性能和可读性的再次提示,请使用switch代替ifelse