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>

アクティビティの「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 など) の背景にグラデーションを適用した場合は、レイアウトが ConstraintLayout の場合のサンプルとして、膨張した XML から次のようにアクセスします。

   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 = Color.BLUE

于 2019-02-02T17:46:24.993 に答える