首页 > 解决方案 > 自定义键盘上的字母键模糊,而特殊键超级清晰

问题描述

我是语言学家,不是程序员。在一个例子、几本书和这个论坛的帮助下,我为少数民族语言创建了一个自定义键盘,并成功地将背景从难看的黑色变成了自定义颜色。

现在我注意到键盘上的字母键(如“a”、“ǝ”、“b”)看起来很模糊。我只注意到,因为“特殊键”上的符号看起来超级清晰。所以请看下面我的截图:

我没有对按键上的“文本”做任何技巧。我没有提供特殊字体;我猜我的键盘应用程序正在应用像 Noto 这样的默认系统字体。对于这种语言,可以使用所有“特殊字符”,如 ɖ、Ɖ、ŋ、Ŋ、ǝ、Ǝ、ɛ、Ɛ、ɩ、Ɩ、ɔ、Ɔ、ʊ、Ʊ,它们呈现良好(仅模糊)。我在这里列出它们以说明为什么这种语言确实需要自定义键盘。这个问题与(仅)数千 WhatsApp、Facebook 和 Android 用户有关。

这是来自“普通”手机的屏幕截图:没有特殊的系统字体,没有生根,正常的 Android 6.0,屏幕分辨率 1280 x 720,由内置工具截取的屏幕截图,然后在 GIMP 中为您缩放到 400%(没有任何插值当然)并保存为无损PNG。

请注意“特殊符号”如何在需要的地方(圆角和对角线)进行一些合理的抗锯齿,以及“ŋ”、“q”和“1”上的垂直向下笔划如何表明存在不需要的抗锯齿( ?) 适用于所有字母。这种行为在整个键盘上是一致的:所有字母都是模糊的,而所有符号都是清晰的。

屏幕截图缩放到 400%

我可以在几部不同的手机(真实硬件)上重现此问题,例如在具有 800 x 480 像素屏幕的 Android 4.4.2 上,它看起来更糟。

更新 1:从用户评论中提示我去看看我的“特殊字符”,如大写锁定和键盘隐藏(如屏幕截图所示)。我惊讶地发现这些只是 png 文件,而且我在 drawable-subfolders 中有很多这些文件,比如 24x24px 到 96x96px 的 drawable-xhdpi。几周前,我从一些公开的谷歌图标中得到了它们。因此,如果我不厌其烦地为我的 4 x 39 键中的每一个为 6 种不同的屏幕尺寸(936 个文件供那些在弄清楚这一点之前无法移动的读者提供 936 个文件)制作清晰的 png 图像,那么我会有至少是一种蛮力解决方法,但并不是真正回答“邪恶模糊的地方和原因?”。

在 Android 世界中,第一款手机(我相信从 Android 8 开始就可以使用)最终获得矢量绘图的“Going bitmap”感觉不对。谁知道呢,可能会有屏幕在那些 24x24px 或 96x96px PNG 上变成僵尸,并且渲染得比我在硬件上看到的还要糟糕……:1 etadpU

现在我将我的数据给出,如果您想看更多请大声疾呼。

从我的文件\app\src\main\res\xml\qwerty.xml我给你屏幕截图中显示的行加上介绍:

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

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="10%p"
    android:horizontalGap="0px"
    android:verticalGap="0px"
    android:keyHeight="@dimen/key_height"
>


<Row>
    <Key android:codes="119" android:keyLabel="w" android:keyEdgeFlags="left"/>
    <Key android:codes="331" android:keyLabel="ŋ" android:popupKeyboard="@xml/keyboard_popup_template" android:popupCharacters="ŋɲ"/>
    <Key android:codes="99,231" android:keyLabel="c" android:popupCharacters="cç©" android:popupKeyboard="@xml/keyboard_popup_template"/>
...
</Row>

<Row>
    <Key android:codes="-1" android:keyIcon="@drawable/baseline_keyboard_capslock_black_24"
            android:keyWidth="15%p" android:isModifier="true"
            android:isSticky="true" android:keyEdgeFlags="left"/>
    <Key android:codes="113" android:keyLabel="q"/>
...   
</Row>

<Row android:rowEdgeFlags="bottom">
    <Key android:codes="-3" android:keyIcon="@drawable/baseline_keyboard_hide_black_24"
            android:keyWidth="15%p" android:keyEdgeFlags="left"/>
    <Key android:codes="-2" android:keyLabel="123" android:keyWidth="10%p"/>

</Row>

这是我的\app\src\main\res\layout\input.xml

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

<org.gasana.android.aniikeyboard.LatinKeyboardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/keyboard"
    android:layout_alignParentBottom="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:keyBackground="@drawable/samplekeybackground"
    android:keyTextColor="#000000"
    android:popupLayout="@layout/popup"
/>

我的背景不是位图,而是 xml 定义的,这是您在屏幕截图中看到的“正常”(未按下)文件 \app\src\main\res\drawable\normal.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="1dp" android:color="#A1B7F7" />
    <solid android:color="#C7D4FA"/>
</shape>

我在另一个问题中看到,模糊可能与抗锯齿和对齐有关。所以现在我需要帮助来检查这是否是我在 Android-Context 中的问题,它发生在哪里以及如何解决它:

在 TextField 中滚动时位图/嵌入文本模糊?(闪存/AS3)

我准备引用更多代码并回答您的后续问题。请帮助我更接近问题。谢谢你。

标签: androidandroid-softkeyboardtext-rendering

解决方案


我对 KeyboardView 有同样的问题。我认为在这种情况下它也可能对LatinKeyboardView 有所帮助。

就我而言,我在KeyboardView属性中添加了 shadowRadius

安卓:shadowRadius="0.0"

键盘视图:android:shadowRadius


推荐阅读