2015-07-11 42 views
0

我嘗試使用Material Design創建應用程序。在官方文檔之後,我在文件夾values-v21中添加了一個style.xml文件。Material Design小部件無法讀取樣式屬性

<resources> 
    <style name="AppTheme" parent="android:Theme.Material"> 
     <item name="android:colorPrimary">@color/primary</item> 
     <item name="android:colorPrimaryDark">@color/primary_dark</item> 
     <item name="android:colorAccent">@color/accent</item> 
     <item name="android:textColorPrimary">@color/text_primary</item> 
    </style> 
</resources> 

當我用設計支持庫中的一個小部件膨脹佈局時出現問題。

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".ui.intro.LoginFragment"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.design.widget.TextInputLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <EditText 
      android:id="@+id/etEmail_loginFragment" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="@string/Email" 
      android:inputType="textEmailAddress" 
      android:textSize="@dimen/text_normal"/> 

    </android.support.design.widget.TextInputLayout> 

    <android.support.design.widget.TextInputLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <EditText 
      android:id="@+id/etPassword_loginFragment" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="@string/Password" 
      android:inputType="textPassword" 
      android:textSize="@dimen/text_normal"/> 

    </android.support.design.widget.TextInputLayout> 

    <Button 
     android:id="@+id/btnLogin_loginFragment" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/Login" 
     android:textColor="@color/text_primary" 
     android:textSize="@dimen/text_normal"/> 

    <com.google.android.gms.common.SignInButton 
     android:id="@+id/btnGoogleSignIn_loginFragment" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center"/> 

</LinearLayout> 


<ProgressBar 
    android:id="@+id/progress_loginFragment" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:indeterminate="true" 
    android:visibility="gone"/> 

</android.support.design.widget.CoordinatorLayout> 

Android Studio中佈局的預覽說:

未能轉換ATTR/colorPrimaryDark成繪製(未顯示3個類似的錯誤)

的3個錯誤的?涉及到CoordinatorLayout和兩個TextInputLayout。如果我運行應用程序,當我吹佈局進入分片我得到這個:

07-11 19:27:13.357 24826-24826/com.test E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.test, PID: 24826 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test/com.test.ui.intro.IntroActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
      at android.app.ActivityThread.access$800(ActivityThread.java:144) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout 
      at android.view.LayoutInflater.createView(LayoutInflater.java:633) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:482) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
      at com.test.ui.intro.LoginFragment.onCreateView(LoginFragment.java:46) 
      at android.app.Fragment.performCreateView(Fragment.java:2053) 
      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894) 
      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
      at android.app.BackStackRecord.run(BackStackRecord.java:833) 
      at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) 
      at android.app.Activity.performStart(Activity.java:5948) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: java.lang.reflect.InvocationTargetException 
      at java.lang.reflect.Constructor.newInstance(Native Method) 
      at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
      at android.view.LayoutInflater.createView(LayoutInflater.java:607) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:482) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
            at com.test.ui.intro.LoginFragment.onCreateView(LoginFragment.java:46) 
            at android.app.Fragment.performCreateView(Fragment.java:2053) 
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894) 
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
            at android.app.BackStackRecord.run(BackStackRecord.java:833) 
            at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) 
            at android.app.Activity.performStart(Activity.java:5948) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
    Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 1 
      at android.content.res.TypedArray.getDrawable(TypedArray.java:747) 
      at android.support.design.widget.CoordinatorLayout.<init>(CoordinatorLayout.java:177) 
      at android.support.design.widget.CoordinatorLayout.<init>(CoordinatorLayout.java:159) 
            at java.lang.reflect.Constructor.newInstance(Native Method) 
            at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
            at android.view.LayoutInflater.createView(LayoutInflater.java:607) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:482) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
            at com.test.ui.intro.LoginFragment.onCreateView(LoginFragment.java:46) 
            at android.app.Fragment.performCreateView(Fragment.java:2053) 
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894) 
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
            at android.app.BackStackRecord.run(BackStackRecord.java:833) 
            at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) 
            at android.app.Activity.performStart(Activity.java:5948) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

回答

4

這些線是不夠的:

<item name="android:colorPrimary">@color/primary</item> 
<item name="android:colorPrimaryDark">@color/primary_dark</item> 
<item name="android:colorAccent">@color/accent</item> 
<item name="android:textColorPrimary">@color/text_primary</item> 

你應該與這些一起使用:

<item name="colorPrimary">@color/primary</item> 
<item name="colorPrimaryDark">@color/primary_dark</item> 
<item name="colorAccent">@color/accent</item> 
<item name="textColorPrimary">@color/text_primary</item> 

一起使用它們。 Android 5.0+設備讀取上半部分的行,但AppCompat(舊設備)僅檢查沒有android:的行。

+0

謝謝丹尼爾。我按照你的說法改變了,並且我還要在樣式文件中添加colorControlActivated字段。 –