3

我有一个在布局中使用的形状。我希望在我的活动中以编程方式更改颜色。

<shape android:id="@+id/shape1" xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
   <gradient android:id="@+id/gradient1"
        android:startColor="@color/widget_header"
        android:endColor="#0000CC" 
        android:angle="270"/> 

   <corners android:bottomRightRadius="1dp"
        android:bottomLeftRadius="1dp" 
        android:topLeftRadius="7dp"
        android:topRightRadius="7dp"/> 
</shape>

有什么办法可以更改我的 Activity 中的“startColor”和“endColor”属性?

4

2 回答 2

2

检查一下,有很多额外的代码,但它似乎演示了如何在代码中创建可绘制和渐变可绘制...查看第 159 行。您可能不需要在 XML 中创建形状,因为您可能需要以编程方式创建形状等

于 2011-01-22T14:31:49.057 回答
1

用于更改现有渐变可绘制文件的 startColor 和 endColor 的 Kotlin 代码:示例 GradientDrawable 文件(gradient_header.xml):

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<gradient
        android:angle="180"
        android:startColor="@color/StartColor"
        android:endColor="@color/EndColor"
        android:type="linear" />

<corners
        android:radius="0dp"/>

以及在 XML 布局文件 (ly_custom_header.xml) 中使用它作为背景的 View(ViewGroup):

<androidx.constraintlayout.widget.ConstraintLayout 
       android:layout_width="match_parent"
       android:background="@drawable/gradient_header"
       android:layout_height="80dp"
       android:id="@+id/rootConstraintLayout">

1- 如果布局 XML ( 文件 : ly_custom_header ) 不在当前活动/片段上下文中,则膨胀它:

  val layoutFile = View.inflate(this, R.layout.ly_custom_header, null)

* 如果视图在当前活动中,只需使用它的 id 而不是膨胀。

2- 如果您将渐变应用到 ViewwGroup 对象(ConstraintLayout、LinearLayout 等)的背景,请像这样从膨胀的 XML 访问它,例如,如果我们的布局是 ConstraintLayout :

   val  rootConstraintLayout= layoutFile.findViewById< ViewGroup  >(R.id.root_constraintlayout_ly_custom_header)

3- 创建一个 gradientDrawable 对象并获取当前应用的 Gradient drawable :

 var drawable  = rootConstraintLayout.background as GradientDrawable

4-更改/设置开始和结束颜色:

   drawable.colors = intArrayOf(   startColor , endColor  )

5-将 dawable 应用于视图(此处为 ConstraintLayout):

rootConstraintLayout.background =  drawable
  • 如果您的颜色是六色,那么您可以使用它来转换它们:

    var startColor = Color.parseColor("#92A8F1") 或简单地使用您的颜色:

    var startColor = 颜色.BLUE

于 2019-02-02T17:46:24.993 回答