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