Xamarinを使用して自分のカスタムリッチテキストエディタを使っています。選択肢に太字、下線、斜体、色などの属性を追加/削除する可能性があります。私はこれらの属性の1つを設定するボタンをクリックするたびにフォーカスを失っていたので、ソフトキーボードで解決策を見つけました。 しかし、私は、私はEditText
にフォーカスを余儀なくされているにもかかわらず、多くのテキスト強制キーボードにテキストを書くことができません。Android Xamarin
を書き込むことはできません
を開き、ソフトキーボードを持ちます。押されたキーは何もしません。 ここで私は示すために、ソフトキーボードを強制的に使用しているコードです:
_myEditText.FocusChange += _MyEditText_OnFocusChanged;
と
private void _editor_FocusChange(object sender, FocusChangeEventArgs e) { _myEditText.RequestFocus(); InputMethodManager imm = (InputMethodManager)Context.GetSystemService(Context.InputMethodService); imm.ToggleSoftInput(ShowFlags.Implicit, 0); }
オープンキーボードを維持する方法はありますがと
EditText
に新しいテキストを書き込むことができることは、 ?私はShowSoftInput()
とShowFlags.Forced
タグで試してみました。さらにShowSoftInputOnFocus
のプロパティーは_myEditText
でしたが、結果は同じです。EDIT
私は私が何をしないのです... Androidのメーカーとキーボードさえ
InputMethodManager
を使用せずに完全にOK作品とのネイティブAndroidのサンプルを作りました。 Xamarinに正常に動作しないものがありますか?ネイティブでは、私がxamarinで作ることができない正確な行動をしているからです。EDIT 2
それは、私は基本的にViewRenderer Xamarin.AndroidのAppCompat.ViewRendererを使用していないよという事実に関連すると思われます。私の方法でそれをテストする。
EDIT 3
あらゆる環境と可能性をテストし、長い時間の後、私はコードはネイティブアプリケーションと同様の作業が、カスタムレンダラであることを結論に来て、
ONLYボタンのクリック数が少なくとも〜0.5秒の長さである場合。
がインスタントクリックをすれば、私は私のEditTextのフォーカスを失って、私は少し長くボタンを押したままにすると、ボタンのアクションが起動され、キーボードが開いたままと選択がで影響を受けますスタイルチェンジメント。
できるだけ簡単に問題を再現するための基本的なコードです。 基本的なフォームアプリを作成するだけです。そして、3次クラスに
マイフォームのカスタムビューを追加します(空)
public class RichTextEditor : View { }
マイアンドロイドレンダラ:
using Android.App; using TestFocusApplicationForms.CustomViews; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(RichTextEditor), typeof(TestFocusApplicationForms.Droid.RichTextEditorRenderer_Droid))] namespace TestFocusApplicationForms.Droid { public class RichTextEditorRenderer_Droid : Xamarin.Forms.Platform.Android.ViewRenderer<RichTextEditor, Android.Views.View> { protected override void OnElementChanged(ElementChangedEventArgs<RichTextEditor> e) { base.OnElementChanged(e); if (e.NewElement == null) { return; } if (Control == null) { Activity activity = this.Context as Activity; var view = activity.LayoutInflater.Inflate(Resource.Layout.TestFocus_Layout, this, false); SetNativeControl(view); } } } }
と対応
TestFocus_Layout.axml
ファイル:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:orientation="horizontal" android:layout_gravity="top|end"> <Button android:layout_gravity="end" android:layout_width="44dp" android:layout_height="44dp" android:text="B" android:id="@+id/boldButton" /> <Button android:layout_gravity="end" android:layout_width="44dp" android:layout_height="44dp" android:text="I" android:id="@+id/italicButton" /> </LinearLayout> <EditText android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="top" android:hint="Texte riche" android:layout_gravity="bottom" android:id="@+id/myEditText" android:singleLine="false" android:imeOptions="actionNone" /> </LinearLayout>
「EditText」でどのように属性を設定しましたか?この問題を再現するために、より多くのコードを共有してください。 –
@ YorkShen-MSFT私は、EditTextの選択にSetSpan(style、startIndex、endIndex、SpanTypes)メソッドを使用しました。これはうまくいく、これは問題ではない。問題は、新しく開かれたキーボードが動作しないということです。 – EddyW
@ YorkShen-MSFT私は、このリッチテキストエディタを表示しているカスタムレンダラーを使用しているという事実に関連しているようです。これは、ネイティブXamarinフォームとカスタムレンダラを使用しないAndroidプラットフォームとXamarin.Android私はXamarin.formsを使用して、このビューをCustomRendererを使ってPageでレンダリングしています。 – EddyW