2017-04-01 19 views
0

。當我跑我的模擬器代碼API 25Android的 - 繪製對象 - 錯誤膨脹的TextView更低API

它工作正常

而是與API 16模擬器,我得到這個錯誤

android.view.InflateException:二進制XML文件行#36:錯誤膨脹類TextVi EW

這裏是我的錯誤

public class RecipeAdapter extends RecyclerView.Adapter<RecipeAdapter.MyViewHolder> { 
    ... 
    static class MyViewHolder extends RecyclerView.ViewHolder{ 
     TextView recipe, time; 
     RatingBar ratingBar; 
     ImageView imageView; 

     MyViewHolder(View view) { 
      super(view); 

      recipe = (TextView) view.findViewById(R.id.tv_recipe_name); 
      time = (TextView) view.findViewById(R.id.tv_time); 
      ratingBar = (RatingBar) view.findViewById(R.id.ratingBar); 
      imageView = (ImageView) view.findViewById(R.id.iv_recipe); 
     } 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.item_recipe, parent, false); // <- Error 

     return new MyViewHolder(itemView); 
    } 
    ... 
} 

這是錯誤消息

E/AndroidRuntime: FATAL EXCEPTION: main 
     android.view.InflateException: Binary XML file line #36: Error inflating class TextView 
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
       at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.java:60) 
       at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
       at com.mnm.cookrecipe.recycler.RecipeAdapter.onCreateViewHolder(RecipeAdapter.java:55) // <- this 
       at com.mnm.cookrecipe.recycler.RecipeAdapter.onCreateViewHolder(RecipeAdapter.java:21) // <- this 
       at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6078) 
       at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5248) 
       at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5158) 
       at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2061) 
       at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:562) 
       at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1408) 
       at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:580) 
       at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170) 
       at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3379) 
       at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3188) 
       at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3632) 
       at android.view.View.layout(View.java:13754) 
       at android.view.ViewGroup.layout(ViewGroup.java:4364) 
       at android.widget.RelativeLayout.onLayout(RelativeLayout.java:948) 
       at android.view.View.layout(View.java:13754) 
       at android.view.ViewGroup.layout(ViewGroup.java:4364) 
       at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
       at android.view.View.layout(View.java:13754) 
       at android.view.ViewGroup.layout(ViewGroup.java:4364) 
       at android.widget.RelativeLayout.onLayout(RelativeLayout.java:948) 
       at android.view.View.layout(View.java:13754) 
       at android.view.ViewGroup.layout(ViewGroup.java:4364) 
       at android.widget.RelativeLayout.onLayout(RelativeLayout.java:948) 
       at android.view.View.layout(View.java:13754) 
       at android.view.ViewGroup.layout(ViewGroup.java:4364) 
       at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1193) 
       at android.view.View.layout(View.java:13754) 
       at android.view.ViewGroup.layout(ViewGroup.java:4364) 
       at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
       at android.view.View.layout(View.java:13754) 
       at android.view.ViewGroup.layout(ViewGroup.java:4364) 
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649) 
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507) 
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1420) 
       at android.view.View.layout(View.java:13754) 
       at android.view.ViewGroup.layout(ViewGroup.java:4364) 
       at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
       at android.view.View.layout(View.java:13754) 
       at android.view.ViewGroup.layout(ViewGroup.java:4364) 
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649) 
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507) 
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1420) 
       at android.view.View.layout(View.java:13754) 
       at android.view.ViewGroup.layout(ViewGroup.java:4364) 
       at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
       at android.view.View.layout(View.java:13754) 
       at android.view.ViewGroup.layout(ViewGroup.java:4364) 
       at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1868) 
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1689) 
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214) 
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 

這裏的線路佈局文件

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/selectableItemBackground" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" 
    android:padding="@dimen/space16"> 

    <ImageView 
     android:id="@+id/iv_recipe" 
     android:layout_width="52dp" 
     android:layout_height="52dp" /> 

    <RatingBar 
     android:id="@+id/ratingBar" 
     style="@style/RatingBar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/space8" 
     android:isIndicator="true" 
     android:numStars="5" 
     android:rating="3.5" /> 

    <TextView 
     android:id="@+id/tv_recipe_name" 
     style="@style/SemiBold" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/space8" 
     android:gravity="center_horizontal" 
     android:text="RECIPES" 
     android:textColor="@color/colorTextDark" 
     android:textSize="@dimen/h3" /> 

    <TextView 
     android:id="@+id/tv_time" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:drawableLeft="@drawable/ic_time" 
     android:drawablePadding="@dimen/space8" 
     android:text="1h 20'" 
     android:textAppearance="@style/Regular" 
     android:textColor="@color/colorTextGrey" 
     android:textSize="@dimen/h3" /> 
</LinearLayout> 

這是app.gradle文件

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.1" 
    defaultConfig { 
     applicationId "com.mnm.cookrecipe" 
     minSdkVersion 15 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
     vectorDrawables.useSupportLibrary = true 
    } 
    buildTypes { 
     debug { 
      debuggable true 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
     release { 
      debuggable false 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    dexOptions { 
     javaMaxHeapSize '3g' 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:25.0.1' 
    compile 'com.android.support:design:25.0.1' 
    compile 'uk.co.chrisjenx:calligraphy:2.2.0' 
    compile 'com.android.support:support-v4:25.0.1' 
    compile 'com.github.bumptech.glide:glide:3.7.0' 
    compile 'com.android.support:recyclerview-v7:25.0.1' 
    compile 'com.android.support:cardview-v7:25.0.1' 
    testCompile 'junit:junit:4.12' 
} 
+0

後發表您的風格= 「@風格/ SemiBold」 在這裏。 –

+0

<樣式名稱= 「SemiBold」 父= 「機器人:TextAppearance」> <項名稱= 「字體路徑」>字體/ SourceSansPro-Semibold.otf –

+0

嘗試改變字體文件名到SourceSansPro_Semibold.otf(在替換連字符與下劃線名稱)。 –

回答

0

機器人:drawableLeft = 「@繪製/ ic_time」 使用在文本視圖似乎是問題。有更好的替換繪製或刪除此行

android:drawableLeft="@drawable/ic_time 

去除

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/selectableItemBackground" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" 
    android:padding="@dimen/space16"> 

    <ImageView 
     android:id="@+id/iv_recipe" 
     android:layout_width="52dp" 
     android:layout_height="52dp" /> 

    <RatingBar 
     android:id="@+id/ratingBar" 
     style="@style/RatingBar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/space8" 
     android:isIndicator="true" 
     android:numStars="5" 
     android:rating="3.5" /> 

    <TextView 
     android:id="@+id/tv_recipe_name" 
     style="@style/SemiBold" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/space8" 
     android:gravity="center_horizontal" 
     android:text="RECIPES" 
     android:textColor="@color/colorTextDark" 
     android:textSize="@dimen/h3" /> 

    <TextView 
     android:id="@+id/tv_time" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:drawablePadding="@dimen/space8" 
     android:text="1h 20'" 
     android:textAppearance="@style/Regular" 
     android:textColor="@color/colorTextGrey" 
     android:textSize="@dimen/h3" /> 
</LinearLayout> 
+0

爲什麼?這沒有意義。爲什麼這種原生的Android功能會導致這麼大的崩潰? –

0
package jdroidcoder.ua.stackquestion1; 

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.RatingBar; 
import android.widget.TextView; 

/** 
* Created by jdroidcoder on 01.04.17. 
*/ 

public class RecipeAdapter extends RecyclerView.Adapter<RecipeAdapter.MyViewHolder> { 
    private Context context; 

    public RecipeAdapter(Context context) { 
     this.context = context; 
    } 

    static class MyViewHolder extends RecyclerView.ViewHolder{ 
     TextView recipe, time; 
     RatingBar ratingBar; 
     ImageView imageView; 

     MyViewHolder(View view) { 
      super(view); 

      recipe = (TextView) view.findViewById(R.id.tv_recipe_name); 
      time = (TextView) view.findViewById(R.id.tv_time); 
      ratingBar = (RatingBar) view.findViewById(R.id.ratingBar); 
      imageView = (ImageView) view.findViewById(R.id.iv_recipe); 
     } 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)) 
       .inflate(R.layout.item_recipe, parent, false); 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 

    } 

    @Override 
    public int getItemCount() { 
     return 0; 
    } 
} 

OR試試這個:

@Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)) 
       .inflate(R.layout.item_recipe, parent, false); 

     if(itemView!=null) 
      ((ViewGroup)itemView.getParent()).removeView(itemView); 
     return new MyViewHolder(itemView); 
    } 
+0

這兩個解決方案都沒有工作 –