Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

230
Visualizações
La fuente personalizada proporciona un glifo incorrecto para ciertas combinaciones de letras en Android

Estoy usando una fuente personalizada en mi proyecto de Android. Por alguna razón cuando el texto incluye las letras IJ juntas, me da el siguiente glifo:

ingrese la descripción de la imagen aquí

Este parece ser el glifo ubicado en \uE2C5 de la región PUA de la fuente.

Los glifos individuales I y J existen en la fuente y puedo hacer que aparezcan si configuro el texto en IJ .

ingrese la descripción de la imagen aquí

No es una fuente OpenType (no creo que Android sea compatible con la representación OpenType en fuentes personalizadas), por lo que no debería suceder nada como esto. ¿Que esta pasando aqui?

El problema es reproducible con el siguiente proyecto simple:

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.textview); Typeface tf = Typeface.createFromAsset(this.getAssets(), "MenksoftHawang.ttf"); textView.setTypeface(tf); textView.setText("IJ"); } }

La fuente se puede descargar desde aquí . Póngalo en la carpeta de activos en el proyecto.

about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Realmente no puedo hablar de la razón por la que está viendo lo que está viendo, pero la combinación de letras de "IJ" parece tener un historial de tratamiento especial. De la página de Wikipedia sobre ligadura tipográfica .

La ij holandesa, sin embargo, es algo más ambigua. Según el estándar utilizado, se puede considerar un dígrafo, una ligadura o una letra en sí misma, y sus formas en mayúsculas y minúsculas a menudo están disponibles como un solo glifo con una ligadura distintiva en varias fuentes profesionales (por ejemplo, Zapfino). Los glifos IJ en mayúscula sans serif, populares en los Países Bajos, suelen utilizar una ligadura que se asemeja a una U con un trazo roto a la izquierda.

También de Wikipedia :

Sustitución y composición de glifos

Algunos caracteres de compatibilidad son completamente prescindibles para el procesamiento de texto y el software de visualización que se ajusta al estándar Unicode. Éstos incluyen:

Ligaduras Las ligaduras como 'ffi' en la escritura latina a menudo se codificaban como un carácter separado en conjuntos de caracteres heredados. El enfoque de Unicode para las ligaduras es tratarlas como texto enriquecido y, si está activado, manejarlas a través de la sustitución de glifos.

Dado esto, supongo que la fuente que está utilizando se ha aprovechado de este tipo de uso para hacer lo suyo.

Actualizar usando setFontFeatureSettings() funciona para deshabilitar la visualización del glifo como se muestra en el siguiente código. Desafortunadamente, esto solo está disponible en API 21+. Hay una advertencia de que puede haber otros efectos secundarios de los que puede ser consciente.

Para las API por debajo de 21, puede usar un programa de edición de fuentes como FontForge y eliminar el glifo en U+E2C5. He hecho esto y elimina el glifo. Esta puede ser la mejor manera de hacerlo, siempre y cuando crea que puede identificar todas las combinaciones de letras que pueden dar como resultado un glifo.

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String features = "\"liga\"=0"; TextView textView = (TextView) findViewById(R.id.textview); Typeface tf = Typeface.createFromAsset(this.getAssets(), "MenksoftHawang" + ".ttf"); textView.setTypeface(tf); textView.setFontFeatureSettings(features); textView.setText("IJ ij"); } }
about 4 years ago · Santiago Trujillo Relatório

0

No estoy seguro de la causa exacta del problema, supongo que también podría ser un problema de fuente.

Pero como solución alternativa, puede aplicar un espacio entre letras pequeño, que mostrará las letras como se esperaba.

 textView1.setText("IJ"); textView2.setLetterSpacing(0.04f); textView2.setText("IJ");

Resultado:

ingrese la descripción de la imagen aquí

about 4 years ago · Santiago Trujillo Relatório

0

Parece que hay tres soluciones a este problema:

1. Deshabilitar programáticamente las ligaduras

Puede deshabilitar las ligaduras mediante programación con setFontFeatureSettings (como se sugiere aquí ) o setLetterSpacing (como se sugiere aquí ). Una desventaja de estos dos métodos es que solo están disponibles desde API 21.

2. Edite las ligaduras fuera de la fuente

Puede usar el software de edición de fuentes para corregir o eliminar los errores de ligadura en la fuente. Consulte estas preguntas y respuestas para saber cómo hacerlo en FontForge. Un problema potencial aquí es que los propietarios de los derechos de autor de las fuentes pueden no permitir que terceros editen sus fuentes.

3. Usa una fuente diferente

A menudo hay diferentes fuentes disponibles y eso es cierto en este caso. La misma empresa que tenía la fuente TrueType problemática en la pregunta también tiene una versión OpenType de esa fuente. La versión OpenType no parece tener los errores de ligadura. Sin embargo, una desventaja es que es significativamente más grande en tamaño, lo que hará que el tamaño de descarga de la aplicación sea mayor.

notas

  • Anteriormente había pensado que no había renderizado de ligaduras antes de Android 6.0. Sin embargo, las fuentes TrueType aparentemente admiten algunas ligaduras básicas y se representan en versiones de Android anteriores a la 6.0.
  • La siguiente imagen de FontForge muestra todas las ligaduras definidas en la fuente problemática a la que se hace referencia en la pregunta. ingrese la descripción de la imagen aquí
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda