簡體   English   中英

如何對按鈕使用波紋效果

[英]how to use ripple effect for a button

我正在使用日食。 我想使用ripple effect

我有appcompat-v7:21.0.0。

繪制/的test.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@android:color/white"> <!-- ripple color -->

    <item android:drawable="@android:color/holo_blue_bright"/> <!-- normal color -->

</ripple>

activity_main.xml中

<LinearLayout 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="com.example.ex48_materialdesign.MainActivity" 
    android:orientation="vertical">


    <Button 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="test"
        android:background="@drawable/test"
        />

</LinearLayout>

但是我得到這些錯誤:

> 03-12 15:12:11.441: E/AndroidRuntime(4828): FATAL EXCEPTION: main
> 03-12 15:12:11.441: E/AndroidRuntime(4828):
> java.lang.RuntimeException: Unable to start activity
> ComponentInfo{com.example.ex48_materialdesign/com.example.ex48_materialdesign.MainActivity}:
> android.view.InflateException: Binary XML file line #13: Error
> inflating class android.widget.Button 03-12 15:12:11.441:
> E/AndroidRuntime(4828):   at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2247)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2297)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.app.ActivityThread.access$700(ActivityThread.java:152) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.os.Handler.dispatchMessage(Handler.java:99) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> android.os.Looper.loop(Looper.java:137) 03-12 15:12:11.441:
> E/AndroidRuntime(4828):   at
> android.app.ActivityThread.main(ActivityThread.java:5328) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> java.lang.reflect.Method.invokeNative(Native Method) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> java.lang.reflect.Method.invoke(Method.java:511) 03-12 15:12:11.441:
> E/AndroidRuntime(4828):   at
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> dalvik.system.NativeStart.main(Native Method) 03-12 15:12:11.441:
> E/AndroidRuntime(4828): Caused by: android.view.InflateException:
> Binary XML file line #13: Error inflating class android.widget.Button
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.view.LayoutInflater.createView(LayoutInflater.java:619) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.view.LayoutInflater.onCreateView(LayoutInflater.java:666)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.view.LayoutInflater.rInflate(LayoutInflater.java:752) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> android.view.LayoutInflater.inflate(LayoutInflater.java:495) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> android.view.LayoutInflater.inflate(LayoutInflater.java:397) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> android.view.LayoutInflater.inflate(LayoutInflater.java:353) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> com.example.ex48_materialdesign.MainActivity.onCreate(MainActivity.java:13)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.app.Activity.performCreate(Activity.java:5250) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   ... 11 more 03-12
> 15:12:11.441: E/AndroidRuntime(4828): Caused by:
> java.lang.reflect.InvocationTargetException 03-12 15:12:11.441:
> E/AndroidRuntime(4828):   at
> java.lang.reflect.Constructor.constructNative(Native Method) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> java.lang.reflect.Constructor.newInstance(Constructor.java:417) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> android.view.LayoutInflater.createView(LayoutInflater.java:593) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     ... 24 more 03-12 15:12:11.441:
> E/AndroidRuntime(4828): Caused by:
> android.content.res.Resources$NotFoundException: File
> res/drawable/test.xml from drawable resource ID #0x7f020034 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> android.content.res.Resources.loadDrawable(Resources.java:2842) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> android.content.res.TypedArray.getDrawable(TypedArray.java:602) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     at
> android.view.View.<init>(View.java:3460) 03-12 15:12:11.441:
> E/AndroidRuntime(4828):   at
> android.widget.TextView.<init>(TextView.java:791) 03-12 15:12:11.441:
> E/AndroidRuntime(4828):   at
> android.widget.Button.<init>(Button.java:107) 03-12 15:12:11.441:
> E/AndroidRuntime(4828):   at
> android.widget.Button.<init>(Button.java:103) 03-12 15:12:11.441:
> E/AndroidRuntime(4828):   ... 27 more 03-12 15:12:11.441:
> E/AndroidRuntime(4828): Caused by:
> org.xmlpull.v1.XmlPullParserException: Binary XML file line #1:
> invalid drawable tag ripple 03-12 15:12:11.441:
> E/AndroidRuntime(4828):   at
> android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:917)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.graphics.drawable.Drawable.createFromXml(Drawable.java:858)
> 03-12 15:12:11.441: E/AndroidRuntime(4828):   at
> android.content.res.Resources.loadDrawable(Resources.java:2839) 03-12
> 15:12:11.441: E/AndroidRuntime(4828):     ... 32 more

是否可以使用低於5.0+的標簽?

您不能在Android 5.0之前的可繪制資源中使用<ripple> ,因為當時不存在它。 appcompat-v7這樣的appcompat-v7移植可以appcompat-v7移植Java代碼和樣式,但是它們不能使早期版本的Android識別新的資源結構。

另外, RippleDrawable僅存在於API級別21中,並且似乎不在appcompat-v7

歡迎您嘗試RippleDrawable backport ,盡管您可能必須從Java代碼而不是從資源中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM