android - 以编程方式更改文本样式

标签 android android-studio

我想在用户选中粗体复选框时将文本样式更改为粗体,但我无法做到这一点。即使在选中复选框后,文本也会正常显示。

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/editText"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentBottom="true"
    android:layout_alignParentTop="true"
    android:gravity="top"
    />

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="bold"
    android:id="@+id/bold"
    android:layout_alignBottom="@+id/editText"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginBottom="57dp"
    android:checked="false" />

</RelativeLayout>

主要 Activity

public class MainActivity extends AppCompatActivity {
    CheckBox checkBox;
    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        editText= (EditText) findViewById(R.id.editText);
        checkBox=(CheckBox)findViewById(R.id.bold);
        if(checkBox.isChecked())
            editText.setTypeface(editText.getTypeface(), Typeface.BOLD);

    }
    ...
}

最佳答案

您需要添加一个 OnCheckedChangeListener 并在那里更改字体。

对于粗体和斜体复选框,您可以这样做:

CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton button, boolean checked) {
        Typeface typeface = editText.getTypeface();

        switch(button.getId()) {
            case R.id.bold:
                if(typeface.isItalic()) {
                    editText.setTypeface(typeface, checked?Typeface.BOLD_ITALIC:Typeface.ITALIC);
                } else {
                    editText.setTypeface(typeface, checked?Typeface.BOLD:Typeface.NORMAL);
                }
                break;
            case R.id.italic:
                if(typeface.isBold()) {
                    editText.setTypeface(typeface, checked?Typeface.BOLD_ITALIC:Typeface.BOLD);
                } else {
                    editText.setTypeface(typeface, checked?Typeface.ITALIC:Typeface.NORMAL);
                }
                break;
        }
    }
};

bold.setOnCheckedChangeListener(listener);
italic.setOnCheckedChangeListener(listener);

关于android - 以编程方式更改文本样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38234885/

相关文章:

java - 如何在 Java 中管理多个自定义异常

android - 无法启动 Activity ComponentInfo android.view.InflateException:二进制XML文件第19行:夸大类 fragment 的错误

android - 如何移动 ANDROID_SDK_HOME

android - 如何在水平 ListView 中获取动态数据

android - 如何使用带有 Activity android的现成sql数据库启动应用程序

android - 有没有办法可视化使用 Android Studio 开发的 Flutter 应用程序中的特定 UI 元素?

android - 条目 :blameLogFolder=null. 中的空值在 android studio 中

安卓 : Insert multiple rows into sqlite database not working

android - 在 WebView 中托管的 HTML 页面中捕获 Javascript onclick 事件

android - 带工具栏和 fragment 的 CoordinatorLayout