29

EditTextフィールドに表示されるヒントのフォントを変更することはできますか? xml自体にフォントを設定したい。

4

10 に答える 10

27

SpannableString と Custom TypefaceSpan で変更できます。

まず、カスタム TypefaceSpan クラスを作成します。

public class CustomTypefaceSpan extends TypefaceSpan {
    private final Typeface mNewType;

    public CustomTypefaceSpan(Typeface type) {
        super("");
        mNewType = type;
    }

    public CustomTypefaceSpan(String family, Typeface type) {
        super(family);
        mNewType = type;
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        applyCustomTypeFace(ds, mNewType);
    }

    @Override
    public void updateMeasureState(TextPaint paint) {
        applyCustomTypeFace(paint, mNewType);
    }

    private static void applyCustomTypeFace(Paint paint, Typeface tf) {
        int oldStyle;
        Typeface old = paint.getTypeface();
        if (old == null) {
            oldStyle = 0;
        } else {
            oldStyle = old.getStyle();
        }

        int fake = oldStyle & ~tf.getStyle();
        if ((fake & Typeface.BOLD) != 0) {
            paint.setFakeBoldText(true);
        }

        if ((fake & Typeface.ITALIC) != 0) {
            paint.setTextSkewX(-0.25f);
        }

        paint.setTypeface(tf);
    }
}

次に、TypefaceSpan を SpannableString に設定します。

TypefaceSpan typefaceSpan = new CustomTypefaceSpan(typeface);
SpannableString spannableString = new SpannableString(hintText);

spannableString.setSpan(typefaceSpan, 0, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

最後に、EditText のヒントを設定します。

mEditText.setHint(spannableString);
于 2016-02-10T17:56:06.393 に答える
7

XMLでヒントフォントを変更する便利な方法を見つけていませんが、次のように達成できます:

mEt.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if(s.length()== 0) {
            //mEt.setTypeFace(normalFont);
        }else{
           // mEt.setTypeFace(hintFont);
        }
    }

    @Override
    public void afterTextChanged(Editable s) {
    }
});
于 2015-12-09T12:11:48.087 に答える
5

それを行うための非常に簡単な方法があります。私は自分のアプリでやっただけで、うまくいきました。Key は、EditText とともに TextInputLayout の Facetype にも設定されます。

mEmailView.setTypeface(Typeface.createFromAsset(getAssets(), getString(R.string.app_font)));
((TextInputLayout) findViewById(R.id.tilEmail)).setTypeface(Typeface.createFromAsset(getAssets(), getString(R.string.app_font)));
于 2016-10-15T13:59:56.183 に答える
2

このライブラリを使用して、ヒントのフォントを変更できます。

ライブラリをコンパイルしたら、次のコマンドでアプリケーションのクラスとクラス定義を作成する必要があります。

CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                  .setDefaultFontPath("font.ttf")
                  .setFontAttrId(R.attr.fontPath)
                  .build()
          );

必要な各アクティビティの後、次のコマンドでオーバーライドします。

@Override
      protected void attachBaseContext(Context newBase) {
          super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
      }
于 2016-11-29T14:54:16.337 に答える
2

XMLでは不可能です-

XML では、テキストとヒントに同じフォントのみを使用できます。

于 2012-11-06T13:33:31.223 に答える
0

Android 8.0 (API レベル 26) では、EditText に表示されるヒントの xml のフォントを変更できる新機能が追加されました。XML の Fonts に基づくガイド。

手順:

1)新しいリソース ディレクトリを作成します。resフォルダーを右クリックし、[新規] -> [Android リソース ディレクトリ] に移動します。

2)リソース ディレクトリの名前をfontに設定します。

3) [リソース タイプ] リストで [フォント]を選択し、[OK] をクリックします。

4)カスタム フォント (my_font.ttf など) をフォントフォルダーに追加します。

5)レイアウト XML で、fontFamily属性をフォント ファイルに設定します。

<EditText
    android:id="@+id/edit_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/my_font"/>

...またはプログラムで実行する場合:

val typeface = resources.getFont(R.font.my_font)
edit_text.typeface = typeface

Android 4.1 (API レベル 16) 以降を実行しているデバイスで XML 機能のフォントを使用するには、サポート ライブラリ 26 を使用します。

注: サポート ライブラリを介して XML レイアウトでフォント ファミリを宣言する場合は、アプリの名前空間を使用して、フォントが確実に読み込まれるようにします。

1)フォントディレクトリにcustom_font.xmlを作成します。

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
    <font app:fontStyle="normal" app:fontWeight="400" app:font="@font/my_font"/>
</font-family>

2) fontFamily属性を設定します。

 <EditText
    android:id="@+id/edit_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/custom_font"/>

...またはプログラムで実行する場合:

val typeface = ResourcesCompat.getFont(context, R.font.custom_font)
edit_text.typeface = typeface
于 2019-02-01T12:56:45.593 に答える
-3

このコードを使用してください:

edittext.setAccentTypeface(typeface);
于 2017-11-10T07:10:58.657 に答える