【问题标题】:Gradient colors not displaying for a button background in all versions of android在所有版本的android中,按钮背景都没有显示渐变颜色
【发布时间】:2013-07-04 23:20:01
【问题描述】:

我有一个在 xml 文件中定义的背景按钮,以便它显示我选择的形状和颜色等。

到目前为止,我一直在使用旧的 api,这工作正常,但是自从将代码更新到最新的 android 版本后,我发现我设置的颜色,虽然它们在我正在测试的 android 4 平板电脑上工作正常,但没有在我的旧 android 2.3.5 手机上工作时间更长。 相反,应用程序似乎忽略了我的颜色选择并使用(我猜是因为它是某种默认值)黑色到白色的渐变(分别从上到下,而角度设置为 270)。我可以改变角度,所以必须使用 xml 文件,但无论我将开始/结束颜色设置为什么,它们似乎都被忽略了。

按钮背景xml如下:

  <?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item>     
    <shape>
       <gradient
            android:endColor="@color/MyEndColor"
            android:startColor="@color/MyStartColor"
            android:angle="270" />
        <stroke
            android:width="1dp"
            android:color="@color/MyStrokeColor"/>
        <corners
            android:radius="10dp" />
        <padding
            android:left="6dp"
            android:top="10dp"
            android:right="6dp"
            android:bottom="10dp" />
    </shape>
</item>

布局xml定义按钮如下:

  <Button           
    android:layout_width="120dip"
    android:layout_height="wrap_content" 
    android:layout_below="@+id/firstEditText"
    android:layout_marginTop="30dip"
    android:layout_centerHorizontal="true"
    android:drawableRight="@drawable/firstBtnIcon"              
    android:textSize="26sp"
    android:textColor="#AA000000"               
    android:textStyle="bold"
    android:onClick="test"
    android:id="@+id/firstBtn"
    android:background="@drawable/mybutton"
   />

按钮位于滚动视图中的相对布局内。

有没有人知道任何 api 的具体原因,或者是否有任何已知的升级项目的 eclipse 问题? (我已经尝试清理项目但没有改变。)

【问题讨论】:

    标签: android android-xml


    【解决方案1】:

    似乎偶然发现了答案,但我不确定其背后的逻辑。
    为了确认我的问题与 api 相关,我将项目改回目标 api 10,然后它又恢复正确显示按钮。在这样做时,我必须删除我添加到我的活动中的一行: requestWindowFeature(Window.FEATURE_ACTION_BAR);

    我已经添加了这一行,因此我想要的一些应用程序选项可以显示在选项弹出窗口中(以前可以通过设备物理前选项按钮获得,该按钮已从 android 设备中删除,以支持可选的屏幕显示按钮。)

    最终我回到了最新的 api 但忘记取消注释这一行并且低并且看,按钮仍然正确显示。取消注释该行,按钮将再次显示为不需要的黑白渐变。
    因此,我将代码修改为:

      if(android.os.Build.VERSION.SDK_INT > 10)//if past android 2
      {
            requestWindowFeature(Window.FEATURE_ACTION_BAR);//so options can be displayed above android 2
      }
    

    现在它可以在我的两台设备上使用。以为我应该发布这个以防其他人遇到它,但正如我所说,我不确定它背后的逻辑。

    【讨论】:

      猜你喜欢
      • 2015-10-29
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      相关资源
      最近更新 更多