xml drawable在Lollipop API21上无法正常工作

时间:2015-12-12 12:18:02

标签: android xml android-studio

EDITED

决定删除所有上一个问题,因为我制作了一个独立的应用程序只是为了解决这个问题。

问题:当定义为Button的背景时,xml drawable在API21上无法正常工作。并适用于所有其他API。包括仍然是棒棒糖的API22。真奇怪..

制作这个独立的应用程序后,我意识到它可能真的是与xml渐变相关的API21错误。所以在这个应用程序中我只放了一个按钮,在其中我将背景设置为可绘制的xml选择器,根据Button的状态更改背景可绘制文件。

据我所知,API21上的只使用了渐变的起始颜色。

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
   >

   <Button
       android:layout_width="200dp"
       android:layout_height="200dp"
       android:id="@+id/imageView"
       android:background="@drawable/key_pressed_selector"
       android:layout_centerVertical="true"
       android:layout_centerHorizontal="true"/>
</RelativeLayout>

background_key_default.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle">
<gradient
          android:startColor="@color/grey"
          android:endColor="@color/grey"
    />
<corners android:radius="15dp"/>

background_yellow.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
           android:shape="rectangle">

<gradient android:type="radial"
          android:gradientRadius="100"
          android:startColor="@color/dark_blue"
          android:endColor="@color/yellow"
    />
<corners android:radius="15dp"/>
</shape>

background_pressed_selector.xml

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

</selector>

RES /值/ colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="yellow">#ffff39</color>
    <color name="dark_blue">#332ff2</color>
    <color name="grey">#b1b2b6</color>   
</resources>

app running on API19 app running on API21

2 个答案:

答案 0 :(得分:0)

您不必覆盖onTouch()方法

只需尝试将选择器xml文件提供给按钮的背景。

示例

<Button
    android:id="@+id/id_Login_login_btn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:background="@drawable/your_selector_xmlfile"
    android:text="Login" />

答案 1 :(得分:0)

解决!对我来说,版本API21上存在此xml属性android:gradientRadius的错误。

我解决这个问题的方法是创建一个drawable-v21文件夹并复制所有具有此xml属性的xml drawable并使用本附录中的一个:px(像素),dp(密度无关像素),sp(基于首选字体大小的缩放像素),单位为(英寸),毫米(毫米)。

保留默认的drawable文件夹而没有附录。

否则我无法使其工作,当它在API21上工作时它没有在所有其他API上工作,当它在所有其他API上工作时它没有在API21上工作。

对我而言,它就是这样的。

例如:

drawable

android:gradientRadius="110"

<强>抽拉-V21

android:gradientRadius="55%p"