2017-01-10 59 views
1

當我改變了我的minSdkVersion然後我收到此錯誤:更改的minSdkVersion 15至16

android.view.InflateException:二進制XML文件行#43:錯誤充氣類的TextView

早期的教它工作在我做出改變之前罰款。

這是我的風格:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
    </style> 

    <style name="AppTheme.Dark" parent="Theme.AppCompat.NoActionBar"> 
     <item name="colorPrimary">@color/primary</item> 
     <item name="colorPrimaryDark">@color/primary_dark</item> 
     <item name="colorAccent">@color/white</item> 
     <item name="colorControlNormal">@color/greyDark</item> 
     <item name="colorControlActivated">@color/off_white</item> 
     <item name="android:windowBackground">@color/pink</item> 
     <item name="android:fontFamily">sans-serif-light</item> 
     <item name="android:textStyle">normal</item> 
     <item name="android:windowContentTransitions" tools:targetApi="lollipop">true</item> 
     <item name="android:windowAllowEnterTransitionOverlap" tools:targetApi="lollipop">true</item> 
     <item name="android:windowAllowReturnTransitionOverlap" tools:targetApi="lollipop">true</item> 
     <item name="android:windowSharedElementEnterTransition" tools:targetApi="lollipop">@android:transition/move</item> 
     <item name="android:windowSharedElementExitTransition" tools:targetApi="lollipop">@android:transition/move</item> 

    </style> 
    <style name="AlertDialogCustom" parent="@android:style/Theme.Dialog"> 
     <item name="android:textColor">@color/pink</item> 
     <item name="android:typeface">normal</item> 
     <item name="android:height">5dp</item> 
     <item name="android:textSize">20sp</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:background">@color/white</item> 
    </style> 

我想有一些錯誤風格的parent屬性。

+0

再次更改misSDKVersion並檢查它是否正常工作? –

+0

@ReadyAndroid不工作我已經檢查了幾次Pratik答案沒有幫助我,因爲我已經appcompact版本24.2.1 – SamH67

+0

我問在任何minSDKVersion它工作檢查與那一個,如果它不工作然後請添加您的XML文件的錯誤。 –

回答

0

如果你改變你的版本,那麼也改變了支持library.You必須改變支持的lib像egfor API 23,你必須chnage的appcompact庫版本到23 希望這有助於:)

+0

Nopes我的appcompact庫版本是:compile'c​​om.android.support:appcompat-v7:24.2.1' – SamH67

+0

更改應用程序主題 –

+0

好吧,但有什麼變化? – SamH67

0

你應該嘗試改變

<style name="AlertDialogCustom" parent="@android:style/Theme.Dialog"> 

<style name="AlertDialogCustom" parent="Theme.AppCompat.Dialog"> 
0

這是你所使用的字體樣式的家庭問題。可能是sans-serif-light字體在您的資產>>字體文件夾中不可用。所以請檢查如何在android中使用自定義字體。

這裏是要遵循的步驟:

Android的工作室:

第一步:添加字體系列文件到App

A)前往(項目文件夾)

乙)然後,app> src> main

C)將文件夾'assets> fonts'創建到主文件夾中。 D)將'abc.ttf'或'abc.otf'字體文件放入字體文件夾中。

第2步: 立即創建res文件夾下attrs.xml如果不是存在,它並添加聲明,設置樣式

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<declare-styleable name="Font"> 
<attr name="typeface"> 
<enum name="FuturaLT" value="0" /> 
<enum name="FuturaLT_Heavy" value="1" /> 
<enum name="FuturaLT_Light" value="2" /> 
</attr> 
</declare-styleable> 

</resources> 

//這裏FuturaLT/FuturaLT_Heavy/FuturaLT_Light是文件名

注意: - 枚舉名應該是帶有下劃線(_)的字體類型名,使用它可以很容易地理解本地代碼中字體族的用法。沒有特殊字符或其他字母,否則在gen文件夾中會出現相同屬性ID的錯誤。

第3步:創建自定義視圖(按鈕,TextView的,EditText上)類: -

package com.myapp.views; 

import android.content.Context; 
import android.content.res.TypedArray; 
import android.util.AttributeSet; 
import android.widget.TextView; 

import com.myapp.R; 

public class CustomTextView extends TextView { 

    public CustomTextView(Context context) { 
     super(context); 
    } 

    public CustomTextView(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public CustomTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     try { 
      TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Font); 
      int font = a.getInt(R.styleable.Font_typeface, 0); 
      a.recycle(); 
      String str; 
      switch (font) { 
       case 1: 
        str = "fonts/FuturaLT.otf"; 
        break; 
       case 2: 
        str = "fonts/FuturaLT_Heavy.otf"; 
        break; 
       case 3: 
        str = "fonts/FuturaLT_Light.otf"; 
        break; 
       default: 
        str = "fonts/FuturaLT.otf"; 
        break; 
      } 

      setTypeface(FontManager.getInstance(getContext()).loadFont(str)); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @SuppressWarnings("unused") 
    private void internalInit(Context context, AttributeSet attrs) { 

    } 
} 

4步:添加FontManager。Java支持類

package com.myapp.views; 

import android.content.Context; 
import android.graphics.Typeface; 

import java.util.HashMap; 
import java.util.Map; 

public class FontManager { 
    private Map<String, Typeface> fontCache = new HashMap<String, Typeface>(); 
    private static FontManager instance = null; 
    private Context mContext; 

    private FontManager(Context mContext2) { 
     mContext = mContext2; 
    } 

    public synchronized static FontManager getInstance(Context mContext) { 
     if (instance == null) { 
      instance = new FontManager(mContext); 
     } 
     return instance; 
    } 

    public Typeface loadFont(String font) { 
     if (false == fontCache.containsKey(font)) { 
      fontCache.put(font, Typeface.createFromAsset(mContext.getAssets(), font)); 
     } 
     return fontCache.get(font); 
    } 
} 

第5步:在XML佈局用法

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <com.myapp.views.CustomTextView 
     android:id="@+id/tv_time_slot" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     app:typeface="FuturaLT" /> 
</LinearLayout> 

您也可以直接在Java代碼中使用:

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/FuturaLT.ttf"); 
tvText.setTypeface(tf); 

注: -如果你不這樣做在這裏使用FontManager應用字體並直接使用 ,那麼您無法在圖形預覽中看到您的視圖。

+0

請參閱討論我已經詢問過那裏 – SamH67

相關問題