是否可以设置EditText Hint Typeface?

时间:2017-03-27 13:16:37

标签: xamarin xamarin.android

我正在尝试设置EditText Hint Typeface 我发现很少有来自android的解决方案,但无法在Xamarin Android中实现它们

其中一位是:

LayoutInflater inflater = LayoutInflater.From(Application.Context); 
TextView hintTextView = (TextView)inflater.Inflate(com.android.internal.R.layout.textview_hint, null);
hintTextView.SetTypeface(typeface);

但我找不到内部资源

com.android.internal.R.layout.textview_hint

正如我所看到的提示只是TextView。是否可以在应用主题中设置其样式? https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/textview_hint.xml

另一种解决方案可以是本主题的反思 Android EditText hint uses the same font that the EditText has

但我无法获得mHintLayout

var mail = FindViewById<EditText>(Resource.Id.email_input);
Field hintLayoutField = mail.Class.GetDeclaredField("mHintLayout");

1 个答案:

答案 0 :(得分:2)

我正在使用反射来设置提示字体,但我现在使用Calligraphy项目已经有一段时间了,并且效果很好,最好的是,它会自动处理...; - )

安装Calligraphy软件包后,您只需分配 fontPath属性:

<TextView
    android:editable="true"
    fontPath="BalooBhaina-Regular.ttf"
    android:hint="StackOverflow Hint"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>  

enter image description here

Calligraphy有一个基于公共/ Nuget的Xamarin绑定:

获取内部资源ID:

在您的反思示例中,您可以使用com.android.internal.R.layout.textview_hint

获取Resources.GetIdentifier等内部项的资源ID

示例:

int id = Resources.GetIdentifier("textview_hint", "layout", "android");
TextView hintTextView = (TextView)inflater.Inflate(id, null);
hintTextView.SetTypeface(typeface);