アプリに Roboto フォントを実装したいので、stackoverflow のガイドに従って、AutoCompleteTextView 用と通常の TextView 用の 2 つの新しいビューを作成しました。
私が作成した AutoCompleteTextView でレイアウトを使用すると、すべてが正常に機能し、フォントなしで TextView を追加しても機能しますが、TextView にフォントを指定すると、アプリは次の Execption をスローします。
android.view.InflateException: Binary XML file line #53: Binary XML file line #53: Error inflating class layouttesting.busalarmclock.com.busalarmclocktesting.Views.TypeFaceTextView
私はいくつかの掘り下げを行い、その行を理解しました
Typeface typeface = Typeface.createFromAsset(context.getAssets(), "fonts/" + fontName);
他のビューでまったく同じコードを使用していても、アプリがクラッシュしていて、うまく機能しています..
完全な TextView:
public TypeFaceTextView(Context context) {
super(context);
}
public TypeFaceTextView(Context context, AttributeSet attrs) {
super(context, attrs);
//Typeface.createFromAsset doesn't work in the layout editor. Skipping...
if (isInEditMode()) {
return;
}
TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.TypeFaceTextView);
String fontName = styledAttrs.getString(R.styleable.TypeFaceTextView_typeface);
styledAttrs.recycle();
if (fontName != null) {
Typeface typeface = Typeface.createFromAsset(context.getAssets(), "fonts/" + fontName);
setTypeface(typeface);
}
}
public TypeFaceTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
完全な AutoCompleteTextView コード:
public TypeFaceAutoCompleteTextView(Context context) {
super(context);
}
public TypeFaceAutoCompleteTextView(Context context, AttributeSet attrs) {
super(context, attrs);
if(isInEditMode())
{
return;
}
TypedArray styledAttributes = context.obtainStyledAttributes(attrs, R.styleable.TypeFaceAutoCompleteTextView);
String fontName = styledAttributes.getString(R.styleable.TypeFaceAutoCompleteTextView_autocomplete_typeface);
styledAttributes.recycle();
if(fontName != null)
{
Typeface typeface = Typeface.createFromAsset(context.getAssets(), "fonts/"+fontName);
setTypeface(typeface);
}
}
public TypeFaceAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
編集: 通常の TextView を前に置いた場合にのみ発生することに気付きました...
完全なクラッシュ レポートを追加 - 原因がないことに注意してください。
06-16 22:12:52.876 21453-21453/layouttesting.busalarmclock.com.busalarmclocktesting E/AndroidRuntime: FATAL EXCEPTION: main
Process: layouttesting.busalarmclock.com.busalarmclocktesting, PID: 21453
Theme: themes:{default=overlay:com.thoughtlesskyle.theme.roam2, iconPack:com.thoughtlesskyle.theme.roam2, fontPkg:com.thoughtlesskyle.theme.roam2, com.android.systemui=overlay:com.thoughtlesskyle.theme.roam2, com.android.systemui.navbar=overlay:com.thoughtlesskyle.theme.roam2}
android.view.InflateException: Binary XML file line #53: Binary XML file line #53: Error inflating class layouttesting.busalarmclock.com.busalarmclocktesting.Views.TypeFaceTextView
at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at layouttesting.busalarmclock.com.busalarmclocktesting.Fragments.SearchLineFragment.onCreateView(SearchLineFragment.java:22)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2074)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1632)
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1235)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1083)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1609)
at android.view.View.measure(View.java:18799)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:18799)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:669)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:736)
at android.view.View.measure(View.java:18799)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:18799)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1458)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:746)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
at android.view.View.measure(View.java:18799)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:18799)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1458)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:746)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
at android.view.View.measure(View.java:18799)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2899)
at android.view.View.measure(View.java:18799)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2108)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1224)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1460)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1115)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6023)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at and
EDIT EDIT rez IDを変更したため、コールドスワップを行った後、一度機能しましたが、再び機能しなくなりました..
EDIT EDIT EDIT Clean と Rerun を実行すると問題なく動作しますが、これは Instant Run のバグでしょうか?