我在res / values / styles.xml资源文件中定义了按钮样式但是它没有工作

时间:2016-03-28 16:31:51

标签: android android-layout

这是我的样式代码

    <style name="MyButtonStyle" parent="@android:style/Theme.Holo.Light.NoActionBar">
    <item name="android:buttonStyle">@style/MyButton</item>
</style>

<style name="MyButton" parent="android:Widget.Holo.Button">
    <item name="android:textSize">19sp</item>
    <item name="android:layout_margin">0dip</item>
    <item name="android:background">#ffcccc</item>
    <item name="android:paddingLeft">8dp</item>
    <item name="android:paddingRight">8dp</item>
    <item name="android:textColor">#1A237E</item>
</style>

这是我使用此Style

的按钮
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/BSpotify"
    android:id="@+id/BSpotify"
    android:layout_below="@+id/tvTitle"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="44dp"
    android:onClick="BSpotify"
    android:background="@style/MyButtonStyle"
    android:layout_marginBottom="30dp" />

应用程序强制关闭,同时给这个布局充气......

这是我使用此布局的地方

   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    title = (TextView) findViewById(R.id.tvTitle);
    Typeface myTypeface = Typeface.createFromAsset(getAssets(), "myfont.ttf");
    title.setTypeface(myTypeface);
}

这是我的LogCat输出

    java.lang.RuntimeException: Unable to start activity ComponentInfo{hnmn3.mechanic.optimist.portfolio/hnmn3.mechanic.optimist.portfolio.MainActivity}: android.view.InflateException: Binary XML file line #29: Error inflating class Button
                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                                                 at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                 at android.os.Looper.loop(Looper.java:135)
                                                 at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                 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:903)
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                                              Caused by: android.view.InflateException: Binary XML file line #29: Error inflating class Button
                                                 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
                                                 at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
                                                 at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
                                                 at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267)
                                                 at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:130)
                                                 at hnmn3.mechanic.optimist.portfolio.MainActivity.onCreate(MainActivity.java:21)
                                                 at android.app.Activity.performCreate(Activity.java:5990)
                                                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                                                 at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                 at android.os.Looper.loop(Looper.java:135) 
                                                 at android.app.ActivityThread.main(ActivityThread.java:5254) 
                                                 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:903) 
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
                                              Caused by: android.content.res.Resources$NotFoundException: Resource "hnmn3.mechanic.optimist.portfolio:style/MyButton" (7f0800bf)  is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f0800bf a=-1 r=0x7f0800bf}
                                                 at android.content.res.Resources.loadDrawableForCookie(Resources.java:2441)
                                                 at android.content.res.Resources.loadDrawable(Resources.java:2381)
                                                 at android.content.res.TypedArray.getDrawable(TypedArray.java:749)
                                                 at android.view.View.<init>(View.java:3737)
                                                 at android.widget.TextView.<init>(TextView.java:637)
                                                 at android.widget.Button.<init>(Button.java:111)
                                                 at android.widget.Button.<init>(Button.java:107)
                                                 at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:62)
                                                 at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:58)
                                                 at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:109)
                                                 at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:963)
                                                 at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:1022)
                                                 at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
                                                 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:725)
                                                 at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
                                                 at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) 
                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
                                                 at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267) 
                                                 at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:130) 
                                                 at hnmn3.mechanic.optimist.portfolio.MainActivity.onCreate(MainActivity.java:21) 
                                                 at android.app.Activity.performCreate(Activity.java:5990) 
                                                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                                                 at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                 at android.os.Looper.loop(Looper.java:135) 
                                                 at android.app.ActivityThread.main(ActivityThread.java:5254) 
                                                 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:903) 
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
一个样式定义中的

属性保存在res / values / styles.xml资源文件中。当我想创建按钮时,我可以从这个资源文件中提取它,并且只为每个按钮写一些特定的值(例如,android:id或android:text)。通过这样做,我可以使您的代码更清洁。 但我无法做到这一点,它不起作用:(

1 个答案:

答案 0 :(得分:0)

要添加样式,您必须添加名为style =&#34;&#34;的标记。这是一个例子:

<Button
            android:id="@+id/My_Button"
            style="@style/stylename"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/button_content" />

在@style标签中声明您的样式名称。

希望这有帮助!