Xamarin.forms: [バグ] RadioButtonがAndroidでテキストを表示しない

作成日 2020年08月08日  ·  25コメント  ·  ソース: xamarin/Xamarin.Forms

説明

Xamarin.Forms 4.8に更新した後、ラジオボタンはAndroidでテキストを表示しなくなりました。 同じコードが4.7でも機能します。

再現する手順

  1. 新しいXamarin.Forms空白ページアプリを作成します
  2. メインページにラジオボタンを追加します。
    <RadioButton Margin="5" Text="Test" />
  3. Xamarin.Forms NuGetパッケージが4.8.0.1269に更新されていることを確認し、Androidでアプリを実行します。

予想される行動

ラジオボタンは、右側に「テスト」というテキストを表示します。

実際の動作

ラジオボタンの円のみが表示され、テキストは表示されません。

基本情報

  • 問題のあるバージョン:4.8.0.1269
  • 最後の既知の良好なバージョン:4.7.0.1260
  • IDE:Visual Studio 2019
  • プラットフォームターゲットフレームワーク:

    • Android:9.0

スクリーンショット

Screenshot_20200807-233203

unverified bug

最も参考になるコメント

とりあえず締めくくります。

RadioButtonは5.0.0で大きな変更が行われています

11628

新しいものは作成せず、既存の機能を修正するだけです。 お願いします!

全てのコメント25件

とりあえず締めくくります。

RadioButtonは5.0.0で大きな変更が行われています

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

まあ...少なくともそれまでは簡単な回避策があります-RadioButtonをラベルと一緒に水平スタックパネルに配置し、オプションでTapGestureRecognizerをラベルに追加して、タップするとラジオボタンの値も設定されるようにします。

私にとっても、4.8バージョンのxamarinフォームに更新した後にラジオボタンが機能しません。 リアルタイムプロジェクトで使用できるかどうか教えてください。
image

@ kamalkumar1ラジオボタンは機能しますが、Androidではラベルが表示されません。 そこで、通常のラベルを付けてStackPanelに入れ、ラベルにTapGestureRecognizerを追加して、タップするとラジオボタンがチェックされるようにしました。

            <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>

とりあえず締めくくります。

RadioButtonは5.0.0で大きな変更が行われています

11628

新しいものは作成せず、既存の機能を修正するだけです。 お願いします!

そのため、最新バージョンに更新するときに開発エクスペリエンスが不快になるたびに、重大な変更が発生することが予想されます。何が機能し、何が機能しないかわからないため、面倒です。

@Mundeは、Microsoft製品を長期間使用すると、リリースごとに何かが壊れることに慣れます。 しかし、そうです、開発フレームワークがすべての古いリリースを修正することさえせずに、リリースごとに複数のものを壊すのは非常に面倒です...

問題のクイック回避策:

<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>

はい、これによりVisualTreeが増加することはわかっています。 はい、これにはViewModelがRadioButtonを参照し、IsCheckedトグルを実行する必要があることも知っています。 それはきれいな良い解決策ではありませんが、少なくともそれは機能しています。

私もこの問題を見つけました。 新しいXamarin学習者としては、非常に混乱し、疲れています。

@hopekoはそれに慣れているだけで、更新時に問題を解決するために定期的に行っています。 :D

@ Sebastian1989101私はtapGesturesを使用して別の方法を使用しましたが、最初はコードのどこが間違っているのかを探すのに2時間近く無駄だったので、開発者の不快な経験がすべてありました。 xamarinフォームでキックされると言われているので、xf 4.8のままにするか、利用可能な場合は5に移動するというトレードオフがあります。

これは、まったく異なる方向に進む変更がForms 5.0でマージされている場合に、Xamarin Forms4.8で導入される興味深いバグです。 他のチケットが5.0で状況を変える場合、Androidで4.8が完全に機能しなくなるのは奇妙に思えます。

Xamarin開発チームにとって、何かを壊すのは大したことではありませんが、修正には長い時間がかかりました。 質問、あなたは一体何をしているのですか?

@samhoutsたぶん、このバグを閉じるのではなく、簡単に修正できるでしょう。 一ヶ月間、あなたは何もしませんでした。

Aarrrggghhhh、これで私の時間を無駄にしていた。 幸運なことに、これを誤ってリリースする前に遭遇しました。
@ Sebastian1989101に感謝します。すべてのラジオボタンを、ばかげたStackLayout / OnPlatform / TapGesture / Labelの回避策に置き換えてみます。

イライラする。

nugetパッケージで利用可能な入力制御を試してください。

よろしく

カマルクマール.E
シニアモバイルアプリケーション開発者
携帯電話:+ 91-9750461689
Skype:kamalelango15
https://www.linkedin.com/in/kamal-kumar-39450654/

土の上に、2020年10月3日は15:57 RhomGitので[email protected]書きました:

Aarrrggghhhh、これで私の時間を無駄にしていた。 ラッキー私は出くわした
これで誤ってリリースする前に。
すべてのラジオボタンをばかげたものに置き換えてみます
StackLayout / OnPlatform / TapGesture / Labelの回避策、ありがとう
@ Sebastian1989101 https://github.com/Sebastian1989101

イライラする。


あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/xamarin/Xamarin.Forms/issues/11700#issuecomment-703082051
または購読を解除する
https://github.com/notifications/unsubscribe-auth/ABXDAFFNT5VOZUS734J47FLSI337NANCNFSM4PYQFOPA

Wtf @PureWeen今のところこれを閉じるとはどういう意味ですか? それは文字通り完全に壊れており、回帰バグです。 なんて冗談だろう。 実験は「機能しない」という意味ではありません。 4.7に戻ります

私は言語に同意しませんが、これが非常に不便でかなり貧弱な形式であったことに同意します。

このため、最近、最新のプロダクションビルドでさらに多くの問題が発生しています。 UIのデータ入力要素が使用できないため、別のビルドを準備する必要があります。 私のせいですが、元のStackLayout / OnPlatform / TapGesture / Labelの回避策を実行するときに見逃した、XAMLではなくコードでいくつかのUI要素を生成します。

私はおそらく、実験的な機能を再び使用することを気にしないでしょう。

XF 5.0をダウンロードしましたが、RadioButtonにTextプロパティがありません。
テキストなし-バグなし。
利益! =)

XF 5.0をダウンロードしましたが、RadioButtonにTextプロパティがありません。
テキストなし-バグなし。
利益! =)

たぶん、すべてを保持できるコンテンツが含まれているからかもしれません。 参照: https

https://github.com/enisn/Xamarin.Forms.InputKitに切り替え

この機能は実験的なものであると理解してます。問題を解決するべきではあり

XF 5.0をダウンロードしましたが、RadioButtonにTextプロパティがありません。
テキストなし-バグなし。
利益! =)

たぶん、すべてを保持できるコンテンツが含まれているからかもしれません。 参照: https

ありがとう。 これを確認します。

その信頼性について話すことはできませんが、カスタムレンダラーを使用してこの問題を回避することができました。

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テキストを置き換える価値があります

クラシックザマリン!

このページは役に立ちましたか?
0 / 5 - 0 評価