Xamarin을 사용하여 선택 항목에 굵게, 밑줄, 기울임 꼴, 색상 (기타) 속성을 추가/제거 할 수있는 자체 맞춤형 텍스트 편집기를 Android에서 사용하고 있습니다. 나는 이러한 속성 중 하나를 설정하는 버튼을 클릭 할 때마다 포커스를 잃어 버리고 소프트 키보드로 솔루션을 찾았습니다. 그러나강제 키보드에 텍스트를 쓸 수 없습니다. Android Xamarin
을 여는 소프트 키보드와 나는 더 많은 텍스트를 나는
EditText
에 초점을 강제 경우에도
을 쓸 수 없습니다. 누른 키는 아무 것도하지 않습니다. 여기에 내가 보여 소프트 키보드를 강제로 사용하고 코드입니다 :
_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
에 있지만 결과는 같습니다.
편집
나는 안드로이드 Studio와 함께 네이티브 안드로이드에 샘플을 만들어 키보드 내가 놓친 거지 무슨 ... 심지어 InputMethodManager
를 사용하지 않고 완벽하게 확인을 작동합니다. Xamarin에 제대로 작동하지 않는 것이 있습니까? 네이티브에서는 xamarin에서 할 수없는 정확한 동작을하기 때문입니다. 그것은 내가 Xamarin.Android의 AppCompat.ViewRenderer 아닌 기본 ViewRenderer을 사용하고 사실에 관련된 것 같다 2
편집 할 수 있습니다. 그것을 테스트하는 도중. 모든 환경과 가능성을 테스트 오랜 시간 후
EDIT 3
, 나는, 코드가 네이티브 응용 프로그램으로하지만, 사용자 정의 렌더러와 동일한 방식으로 작동하는 결론에 도달했습니다버튼을 클릭하면 이상이어야합니다 (적어도 ~ 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 본 Rich Text Editor를 표시하는 Custom Renderer를 사용하고 있다는 사실이 밝혀졌습니다. Native Xamarin Forms 및 사용자 정의 렌더러가없는 Android 플랫폼 및 Xamarin.Android. Xamarin.forms를 사용하여 CustomRenderer가있는 페이지에서이 뷰를 렌더링하고 있음을 언급하는 것을 잊어 버렸습니다. – EddyW