Xamarin.forms: [Error] RadioButton no muestra texto en Android

Creado en 8 ago. 2020  ·  25Comentarios  ·  Fuente: xamarin/Xamarin.Forms

Descripción

Después de actualizar a Xamarin.Forms 4.8, los botones de opción ya no muestran su texto en Android. El mismo código funciona bajo 4.7.

Pasos para reproducir

  1. Crear una nueva aplicación de página en blanco de Xamarin.Forms
  2. Agregue un botón de radio a la página principal:
    <RadioButton Margin="5" Text="Test" />
  3. Asegúrese de que los paquetes de Xamarin.Forms NuGet estén actualizados a 4.8.0.1269 y ejecute la aplicación en Android.

Comportamiento esperado

El botón de opción muestra el texto "Prueba" a la derecha.

Comportamiento real

Solo se muestra el círculo del botón de opción, sin texto.

Información básica

  • Versión con problema: 4.8.0.1269
  • Última versión buena conocida: 4.7.0.1260
  • IDE: Visual Studio 2019
  • Marcos de destino de la plataforma:

    • Android: 9.0

Capturas de pantalla

Screenshot_20200807-233203

unverified bug

Comentario más útil

Cerrando por ahora.

RadioButton está pasando por un cambio importante en 5.0.0

11628

No hagas nada nuevo, solo corrige la funcionalidad existente. ¡POR FAVOR!

Todos 25 comentarios

Cerrando por ahora.

RadioButton está pasando por un cambio importante en 5.0.0

https://github.com/xamarin/Xamarin.Forms/pull/11628

Bueno ... al menos hay una solución fácil hasta entonces: coloque el RadioButton en un panel de pila horizontal junto con una etiqueta y, opcionalmente, agregue un TapGestureRecognizer a la etiqueta para que al tocarlo también se establezca el valor del botón de opción.

para mí también el botón de radio no funciona después de actualizar a la versión 4.8 de los formularios xamarin. por favor avíseme si puedo usarlo en mi proyecto en tiempo real o no.
image

@ kamalkumar1 El botón de

            <StackLayout Orientation="Horizontal">
              <RadioButton Margin="5" Text="Dark theme" IsChecked="{Binding UseDarkTheme}" />
              <Label VerticalOptions="Center" Text="Dark theme" IsVisible="{OnPlatform Android=true, UWP=false}" >
                <Label.GestureRecognizers>
                  <TapGestureRecognizer Tapped="UseDarkTheme_Tapped" />
                </Label.GestureRecognizers>
              </Label>
            </StackLayout>

Cerrando por ahora.

RadioButton está pasando por un cambio importante en 5.0.0

11628

No hagas nada nuevo, solo corrige la funcionalidad existente. ¡POR FAVOR!

por lo que esperamos cambios importantes cada vez que esto haga que la experiencia de desarrollo sea desagradable porque cuando actualizas a la última versión, no estás seguro de qué funcionará y qué no funcionará, así que es tedioso

@Munde, cuando usas productos de Microsoft durante mucho tiempo, te acostumbras a que algo se rompe con cada lanzamiento. Pero sí, es muy molesto que un marco de desarrollo rompa varias cosas con cada versión sin siquiera arreglar todas las versiones anteriores ...

Solución rápida para el problema:

<StackLayout Orientation="Horizontal">
    <StackLayout.Spacing>
        <OnPlatform x:TypeArguments="x:Double">
            <On Platform="iOS" Value="-8" />
        </OnPlatform>
    </StackLayout.Spacing>

    <RadioButton x:Name="LocalRadioButton" IsChecked="{Binding IsSelected}"
                 GroupName="{Binding Source={x:Reference EntryGrid}, Path=BindingContext.Identifier}" />

    <Label Text="{Binding SelectionText}" FontSize="Default" LineBreakMode="TailTruncation" VerticalOptions="Center">
        <Label.GestureRecognizers>
            <TapGestureRecognizer Command="{Binding ViewModel.ToggleRadioButtonCommand, Source={x:Reference ContentPage}}"
                CommandParameter="{x:Reference LocalRadioButton}" />
        </Label.GestureRecognizers>
    </Label>
</StackLayout>

Sí, sé que esto aumenta VisualTree. Sí, también sé que esto requiere que ViewModel haga referencia al RadioButton y haga el conmutador IsChecked. No es una buena solución limpia, pero al menos está funcionando.

También encontré este problema. Es tan confuso y cansado como nuevo alumno de Xamarin.

@hopeko simplemente se acostumbra, lo hacen regularmente para romper cosas en las actualizaciones. :RE

@ Sebastian1989101 Usé otra forma de usar tapGestures, pero en general su experiencia de desarrollador desagradable, ya que desperdicié casi 2 horas al principio buscando lo que estaba mal con mi código, también en la próxima versión hay muchos cambios por venir, estoy usando c # para maquillaje n se nos dice que está siendo eliminado de las formas xamarin, por lo que es una compensación para quedarse con xf 4.8 o pasar a 5 cuando esté disponible, no hay una transición suave

Este es un error interesante que se introducirá en Xamarin Forms 4.8 si los cambios que van en una dirección completamente diferente se fusionan en Forms 5.0. Parece extraño que 4.8 se rompa por completo en Android si el otro ticket va a cambiar las cosas en 5.0.

Para el equipo de desarrollo de Xamarin, no es gran cosa romper algo, pero arreglarlo tomó mucho tiempo. Pregunta, ¿qué diablos estás haciendo ???

@samhouts Quizás, será fácil corregir este error, no cerrarlo. Todo el mes no hiciste nada.

Aarrrggghhhh, acabo de perder el tiempo con esto. Suerte que lo encontré antes de que accidentalmente lanzáramos con esto.
Intentaré reemplazar todos nuestros RadioButtons con la ridícula solución alternativa StackLayout / OnPlatform / TapGesture / Label, gracias @ Sebastian1989101

Frustrante.

Pruebe el control de entrada disponible en nuget packge.

Considerar

Kamalkumar.E
Desarrollador senior de aplicaciones móviles
Móvil: + 91-9750461689
Skype: kamalelango15
https://www.linkedin.com/in/kamal-kumar-39450654/

El sábado 3 de octubre de 2020 a las 3:57 p.m., RhomGit [email protected] escribió:

Aarrrggghhhh, acabo de perder el tiempo con esto. Suerte que me encontré
antes de que lo liberemos accidentalmente con esto.
Intentaré reemplazar todos nuestros RadioButtons con el ridículo
StackLayout / OnPlatform / TapGesture / Label, gracias
@ Sebastian1989101 https://github.com/Sebastian1989101

Frustrante.

-
Estás recibiendo esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/xamarin/Xamarin.Forms/issues/11700#issuecomment-703082051 ,
o darse de baja
https://github.com/notifications/unsubscribe-auth/ABXDAFFNT5VOZUS734J47FLSI337NANCNFSM4PYQFOPA
.

Wtf @PureWeen, ¿qué quieres decir con cerrar esto por ahora? Está literalmente completamente roto y es un error de regresión. Qué jodida broma. Experimental no significa "no funciona". Voy a volver a 4.7

Si bien no estoy de acuerdo con el lenguaje, sí estoy de acuerdo en que ha sido una forma extremadamente inconveniente y bastante pobre.

Han surgido más problemas recientemente en nuestra última versión de producción debido a esto. Ahora necesitamos preparar otra compilación porque los elementos de entrada de datos de la interfaz de usuario no se pueden utilizar. Realmente es mi culpa, generamos algunos elementos de la interfaz de usuario en el código, no en XAML, que me perdí al hacer la solución original StackLayout / OnPlatform / TapGesture / Label.

Probablemente no me molestaré en usar características experimentales nuevamente.

He descargado XF 5.0 y no hay ninguna propiedad Text en RadioButton.
Sin texto, sin error.
¡Lucro! =)

He descargado XF 5.0 y no hay ninguna propiedad Text en RadioButton.
Sin texto, sin error.
¡Lucro! =)

Quizás, solo quizás porque ahora tiene un contenido que puede contener todo. Ver: https://youtu.be/ttF80UnrJAg?t=364

Cambiando a https://github.com/enisn/Xamarin.Forms.InputKit

Entiendo que la función era experimental; el problema no debería resolverse. Las radios sin etiquetas son un gran problema y cerrarlas no me deja con mucha confianza.

He descargado XF 5.0 y no hay ninguna propiedad Text en RadioButton.
Sin texto, sin error.
¡Lucro! =)

Quizás, solo quizás porque ahora tiene un contenido que puede contener todo. Ver: https://youtu.be/ttF80UnrJAg?t=364

Gracias. Comprobaré esto.

No puedo hablar de su confiabilidad, pero pude solucionar este problema con un renderizador personalizado.

using Android.Content;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(RadioButton), typeof(ProjectName.Droid.Renderers.PatchedRadioButtonRenderer))]
namespace ProjectName.Droid.Renderers
{
    /// <summary>
    /// A workaround for the issue in the in-box renderer.
    /// https://github.com/xamarin/Xamarin.Forms/issues/11700
    /// </summary>
    public class PatchedRadioButtonRenderer : RadioButtonRenderer
    {
        public PatchedRadioButtonRenderer(Context context) : base(context) {}

        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            // Apply text to native radio button
            this.Control.Text = e.NewElement.Text;

            base.OnElementChanged(e);
        }
    }
}

@ IgorKravchenko10 hay un valor que reemplace el texto

¡Xamarin clásico!

¿Fue útil esta página
0 / 5 - 0 calificaciones