Android 向复合视图传递参数

Android 向复合视图传递参数,android,Android,这是我的主要xml布局的一部分。我有一个复合视图(SingleDrinkView),我想为每个“SingleDrinkView”的图像按钮设置不同的src <LinearLayout android:layout_width="fill_parent" android:layout_height="100dp" android:layout_below="@id/profilePhoto" an

这是我的主要xml布局的一部分。我有一个复合视图(SingleDrinkView),我想为每个“SingleDrinkView”的图像按钮设置不同的src

<LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="100dp"
            android:layout_below="@id/profilePhoto"
            android:background="#d0d0d0"
            android:orientation="horizontal" >

            <com.ziepa.drinkparty.SingleDrinkView
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                custom:drinkImage="@drawable/beer_icon"
                />
            <com.ziepa.drinkparty.SingleDrinkView
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                custom:drinkImage="@drawable/shot_icon"
                />
            <com.ziepa.drinkparty.SingleDrinkView
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                custom:drinkImage="@drawable/wine_icon"
                />
        </LinearLayout>

因此,我现在不知道该做什么,我也不确定是否有更聪明的方法。我想让同一个自定义小部件具有不同的“可设置”属性。

好吧,所以我发现在attrs.xml中,不是使用format=string,而是format=integer

然后在switch案例中,需要做的就是使用getDrawable方法而不是getString。这将从xml中正确格式化可绘制文件的资源id

switch (attr)
{
    case R.styleable.SingleDrinkView_drinkImage:

       Drawable drinkImage = a.getDrawable(attr);

       ImageButton imageBt = (ImageButton)this.findViewById(R.id.beerImageButton);
       imageBt.setImageDrawable(drinkImage);

    break;
 ...

这里有更多详细信息:

您采用的方法是我通常采用的方法。到底是什么不起作用?我无法将imageBt设置为可绘制。路径看起来不错,但是createFromPath返回null,因此没有设置图像。
case R.styleable.SingleDrinkView_drinkImage:

  //This string contains "res/drawable-xhdpi/beer_icon.png"
  String drinkImage = a.getString(attr);

  ImageButton imageBt = (ImageButton) this.findViewById (R.id.singleDrinkImage);

  //createFromPath returns null.                
  imageBt.setImageDrawable(Drawable.createFromPath(drinkImage));

break;
switch (attr)
{
    case R.styleable.SingleDrinkView_drinkImage:

       Drawable drinkImage = a.getDrawable(attr);

       ImageButton imageBt = (ImageButton)this.findViewById(R.id.beerImageButton);
       imageBt.setImageDrawable(drinkImage);

    break;
 ...