gpt4 book ai didi

java - 用于编辑 TextView 大小、样式的按钮

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:50 26 4
gpt4 key购买 nike

我想制作按钮来调整我的文本。有一些按钮可以使 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);

}
});

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

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

--------- beginning of crash 11-05 05:34:17.581 2416-2416/com.example.textadjust E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.textadjust, PID: 2416 java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Typeface.getStyle()' on a null object reference at com.example.textadjust.MainActivity$3.onClick(MainActivity.java:57) at android.view.View.performClick(View.java:5198) at android.view.View$PerformClick.run(View.java:21147) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 11-05 05:34:19.734 2416-2416/? I/Process: Sending signal. PID: 2416 SIG: 9

最佳答案

到目前为止您应该知道的是您正在使用以下方法执行的 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;
}

为此在您的类中添加此方法!但您也可以使用以下方法(我建议):

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,将其声明为类变量,并为其分配 onCreate(如果其 Activity)或 onCreateView(如果 Fragment):就在你的类中任何方法之前:

private TextView text;

然后在onCreate中将其指定为:

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

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

再次提示,为了提高性能和可读性,请使用 switch 而不是 ifelse

关于java - 用于编辑 TextView 大小、样式的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47119893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com