当前位置: 首页 > 知识库问答 >
问题:

用于编辑文本视图大小、样式的按钮

邢星波
2023-03-14

我想制作按钮来调整我的文本。有一些按钮可以使文本视图变大、变小,在斜体和粗体之间来回切换。

我想编辑名为“text”的文本视图

在下面的代码中,当我单击“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);

        }
    });

对于斜体和粗体,我这里的代码确实有效,但有时当我单击这些按钮中的任何一个时,应用程序会无缘无故地崩溃。

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

            }


        }
    });

请帮我做这个

非常感谢。

编辑:这是我的日志:)

---------碰撞开始11-05 05:34:17.581 2416-2416/com。实例text调整E/AndroidRuntime:致命异常:主进程:com。实例textadjust,PID:2416 java。lang.NullPointerException:尝试调用虚拟方法“int android”。图样字体。在com的空对象引用上。实例text调整。主要活动3美元。android上的onClick(MainActivity.java:57)。看法看法android上的performClick(View.java:5198)。看法查看$PerformClick。在android上运行(View.java:21147)。操作系统。处理程序。android上的handleCallback(Handler.java:739)。操作系统。处理程序。android上的dispatchMessage(Handler.java:95)。操作系统。活套。android上的loop(Looper.java:148)。应用程序。活动线程。java上的main(ActivityThread.java:5417)。郎。反思。方法在com上调用(本机方法)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(ZygoteInit.java:726)。Android内部的操作系统。合子岩。main(ZygoteInit.java:616)11-05 05:34:19.734 2416-2416/?I/Process:发送信号。PID:2416信号:9

共有1个答案

许学真
2023-03-14

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

text.setTextSize(size + 5.0F);

大小单位是被称为像素,如果您想知道或想使用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可以取这个stackoverflow答案给出的值:

TypedValue.COMPLEX_UNIT_PX   //Pixels

TypedValue.COMPLEX_UNIT_SP   //Scaled Pixels

TypedValue.COMPLEX_UNIT_DIP  //Device Independent Pixels

对于另一个问题,添加一些崩溃日志!找出可能的错误,我会编辑我的答案以添加它!!

但到目前为止,我的建议是减少条件,使用开关,而不是if和else,并确保在调用这些方法之前,TextView有一个文本。添加一些日志以确保发生了什么!

编辑崩溃,因为我猜测崩溃的原因是NullPointerException。这可能是由于您的变量TextView为null引起的。可能的原因是它没有仅在onCreate()中分配,或者分配时没有文本可显示(我猜)解决方案:因为您将在整个类中使用文本视图,将其声明为类变量,并将其赋值为onCreate,如果其活动或onCreateView,如果片段:在任何方法之前,就在类内部:

private TextView text;

然后在“创建”内部将其指定为:

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

并在xmljava代码中设置默认文本或Typeface。现在您可以在类中的任何地方访问TextView变量,它不会为null

为了提高性能和易读性,再次使用开关代替ifetc

 类似资料:
  • 如何在java中向文本视图添加样式?我试图在我的价值观/风格下添加一个。xml,而不是单独添加每个属性。

  • 使用Styles(样式)窗格修改与元素关联的CSS样式。 TL;DR Styles(样式)窗格允许您以尽可能多的方式更改本地CSS,包括编辑现有样式,添加新样式,添加样式规则。 如果你想要样式持久(他们页面重新加载而丢失),您需要将它们持久化到您的开发工作区。 检查应用到元素的样式 选择一个元素[Select an element] 来检查它的样式。Styles(样式)窗格将显示所有应用于所选元素

  • 在MultiAutoCompleteTextView上应用样式:问题是因为OP打算覆盖样式未声明的某些属性。这不是我的问题。 android:MultiAutoCompleteTextView风格,如gmail:这里,OP想要设置与gmail相同的风格,答案显示2 API。此外,没有显示XML代码。因此,这与我的问题和期望大不相同。 我的材质样式似乎没有应用。更准确地说,我只是想让我的(材料!)小

  • 我想将文本从软键盘输入到popupwindow中的Edittext小部件,但我遇到了一些问题。我的活动是一个游戏卡桌,并在上面启用一些动画。在游戏表中,有一些按钮。如果玩家点击某个按钮,将显示一个弹出窗口。问题是播放器无法在弹出窗口中输入文本到Edittext。我发现了一些类似的问题,最流行的建议是: 使用此设置,我可以正常输入Edittext。但是,这将阻止主UI线程并导致停止游戏表中的动画。我

  • 我在我的文件中有这个代码,但是当在编辑文本中键入任何值并按下按钮时,相关的字符串不会打印。如何使其在按下按钮时,根据在编辑文本槽中输入的字符串显示特定文本?

  • 在“定义”选项卡,你可以创建和编辑视图的 SELECT 语句 SQL。Navicat Data Modeler 为编辑视图定义提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置 sql 格式及更多。 【提示】当你在视图创建工具创建视图,SELECT 语句将会自动生成。 美化 SQL(仅适用于非 Essentials 版) 若要格式化凌乱的 SQL 代码到一个结构良好的脚本,你可以点击