首页 > 解决方案 > 更改字体后复选框不显示

问题描述

您好,我在警报对话框中显示复选框时遇到问题。它仅涉及更改字体时的情况。在 Arial 上,所有内容(标题、消息和复选框)都正确显示,但在 Ginger ( AppThemeWithCustomFont) 上,此复选框根本不显示(标题和消息工作正常)。这些是我的代码。

复选框.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/layout_root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:padding="10dp">

    <CheckBox
    android:id="@+id/skip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_gravity="center_horizontal"
    android:buttonTint="#fff"
    app:buttonTint="#fff"
    android:text="@string/checkbox_show"
    android:textColor="#fff"/>

StageZero.java

void configureInitDialog() {
AlertDialog adb = new AlertDialog.Builder(this, R.style.MojStyl).create();
View checkboxLayout = View.inflate(this, R.layout.checkbox, null);

skip = checkboxLayout.findViewById(R.id.skip);
adb.setView(checkboxLayout);
adb.setIcon(android.R.drawable.ic_dialog_info);
adb.setTitle("Info");
adb.setMessage(getResources().getString(R.string.stage_zero_dialog));
adb.setCancelable(false);
adb.setButton(DialogInterface.BUTTON_NEUTRAL, "Ok", (dialogInterface, i) -> {
    String checkBoxResult = "";

    if (skip.isChecked())
        checkBoxResult = "linia2";

    if (checkBoxResult.equals("linia2"))
        editor.putBoolean("hideDialog", true).apply();

});

if (!hideDialog)
    adb.show();
}

样式.xml

    <style name="AppThemeWithClassicFont" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowBackground">@color/activity_background</item>
    <item name="android:icon">@android:color/transparent</item>
    <item name="colorPrimary">@android:color/transparent</item>
    <item name="android:fontFamily">@font/arial</item>
    <item name="android:actionBarStyle">@style/ThemeActionBar</item>
    <item name="android:windowActionBarOverlay">true</item>
    <!-- Support library compatibility -->
    <item name="actionBarStyle">@style/ThemeActionBar</item>
    <item name="windowActionBarOverlay">true</item>
</style>

<!-- Application theme. -->
<style name="AppThemeWithCustomFont" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowBackground">@color/activity_background</item>
    <item name="android:icon">@android:color/transparent</item>
    <item name="colorPrimary">@android:color/transparent</item>
    <item name="android:fontFamily">@font/ginger</item>
    <item name="android:actionBarStyle">@style/ThemeActionBar</item>
    <item name="android:windowActionBarOverlay">true</item>
    <!-- Support library compatibility -->
    <item name="actionBarStyle">@style/ThemeActionBar</item>
    <item name="windowActionBarOverlay">true</item>
</style>

对于任何支持,我都会给出最佳答案。先感谢您!

标签: javaandroid

解决方案


我找到了一种更好的方法来自定义复选框上的字体,请按照以下步骤更改字体:

1-转到文件/新建/文件夹/资产文件夹并在默认位置创建新的资产文件夹。

2-将字体复制到新的 Assets 文件夹中。

3-在 onCreate 方法中使用此代码将新字体设置为复选框:

    checkBox = findViewById(R.id.skip);
    Typeface font = Typeface.createFromAsset(getAssets(), "YourFont.ttf");
    checkBox.setTypeface(font);

这是我用于复选框的 xml 代码,采用相对布局:

    <CheckBox
    android:id="@+id/skip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:buttonTint="#fff"
    app:buttonTint="#1d1d1b"
    android:text="hello world"
    android:textColor="#1d1d1b"/>

但是您可以更改和自定义它。

这就是我使用自定义字体得到的外观:在此处输入图像描述


推荐阅读