【问题标题】:Unable to create a radial gradient无法创建径向渐变
【发布时间】:2015-08-18 08:44:56
【问题描述】:

我正在尝试创建一个带有径向渐变的按钮,但每次加载我的应用程序时,它都会崩溃。

mylayout.xml:

...

<Button
    android:id="@+id/mybutton"
    android:layout_width="@dimen/btnwidth"
    android:layout_height="@dimen/btnheight"
    android:background="@drawable/mybutton" />

...

我的按钮.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval">

            <gradient
                android:type="radial"
                android:startColor="@color/my_start_color"
                android:endColor="@color/my_end_color"/>
        </shape>
    </item>
</layer-list>

以下是错误日志。我的目标是 Android SDK 22。

致命异常:main java.lang.RuntimeException:无法启动 活动组件信息{com.my.app/com.my.app.MyActivity}: android.view.InflateException:二进制 XML 文件行 #324:错误 充气类按钮在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 在 android.app.ActivityThread.access$800(ActivityThread.java:155) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5343) 在 java.lang.reflect.Method.invoke(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 引起:android.view.InflateException:二进制 XML 文件行 #324: 膨胀类按钮时出错 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:504) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在 com.my.app.ui.MyFragment.onCreateView(MyFragment.java:183) 在 android.support.v4.app.Fragment.performCreateView(Fragment.java:1789) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:924) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1116) 在 android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1218) 在 android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2170) 在 android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:300) 在 android.support.v7.app.AppCompatDelegateImplV7.callActivityOnCreateView(AppCompatDelegateImplV7.java:816) 在 android.support.v7.app.AppCompatDelegateImplV11.callActivityOnCreateView(AppCompatDelegateImplV11.java:72) 在 android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:804) 在 android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:725) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:809) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:504) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在 android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 在 android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 在 com.my.app.MyActivity.onCreate(MyActivity.java:1033) 在 android.app.Activity.performCreate(Activity.java:6010) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292) ... 10 更多原因: android.content.res.Resources$NotFoundException:文件 res/drawable-hdpi/mybutton.xml 来自可绘制资源 ID #0x7f02008a 在 android.content.res.Resources.loadDrawableForCookie(Resources.java:2482) 在 android.content.res.Resources.loadDrawable(Resources.java:2384) 在 android.content.res.TypedArray.getDrawable(TypedArray.java:749) 在 android.view.View.(View.java:3742) 在 android.widget.TextView.(TextView.java:637) 在 android.widget.Button.(Button.java:111) 在 android.widget.Button.(Button.java:107) 在 android.support.v7.widget.AppCompatButton.(AppCompatButton.java:60) 在 android.support.v7.widget.AppCompatButton.(AppCompatButton.java:56) 在 android.support.v7.internal.app.AppCompatViewInflater.createView

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    你需要一个渐变半径:

    <gradient
        android:type="radial"
        android:gradientRadius="40"
        android:startColor="@color/my_start_color"
        android:endColor="@color/my_end_color"/>
    

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      定义bg_button.xml:

      <?xml version="1.0" encoding="utf-8"?>
      <selector xmlns:android="http://schemas.android.com/apk/res/android">
          <item android:drawable="@drawable/mybutton" android:state_pressed="true" />
          <item android:drawable="@drawable/mybutton" />
      </selector>
      

      您还可以在此处定义按下状态。当您使用按钮时,这是有道理的。

      这就是你的 mybutton.xml:

      <?xml version="1.0" encoding="utf-8"?>
      <shape xmlns:android="http://schemas.android.com/apk/res/android"
          android:shape="oval">
      
          <gradient
              android:type="radial"
              android:startColor="@color/my_start_color"
              android:endColor="@color/my_end_color"/>
      </shape>
      

      最后,您必须将 bg_button 设置为按钮的背景:

      <Button
          android:id="@+id/mybutton"
          android:layout_width="@dimen/btnwidth"
          android:layout_height="@dimen/btnheight"
          android:background="@drawable/bg_button" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多