一个页面显示N张银行卡,每个卡显示颜色不应一样,之前是写死在xml文件中,但是后来下面卡的布局文件用同一个文件之后,下面的几张卡的颜色就一样了。
于是想到将卡的颜色作为卡要素(卡号,发卡行)这种参数进行传递过去,并且用int型表示颜色,设置两个配套的方法get(),set()
private int mBackGroundColor;
public int getBackgroundColor() {
return mBackgroundColor;
}
public void setBackgroundColor(int mBackgroundColor) {
this.mBackgroundColor = mBackgroundColor;
}
之后在设置卡时候添加:
appDeviceCard2.setBackgroundColor(getResources().getColor(R.color.pink));//卡颜色暂时写死
然后将设置卡要素(卡颜色,卡号)等写在以下方法中
private View getView(UPDeviceCardDetail devCard) {
View containerRoot=localinflater.inflate(R.layout.view_card_cloud, null);
containerRoot.setBackgroundColor(devCard.getBackgroundColor());
return containerRoot;//卡区域所有要素(已添加属性)
}
一个LinearLayout来表示多张卡的区域 <android:@+id/cards_container />
mContainer = ((LinearLayout)findViewById(R..id.cards_container);
for(int i=0;i < cards.length;i++) {
mContaniner.addView(getView(cards[i]), temp);//temp是该区域的一些宽高描述
接上文,昨天虽然实现了对颜色的动态控制,但是卡区域的圆角变没了,因为java代码会对xml布局样式进行覆盖。于是在getView()方法中,加入一个判断,利用Token来对卡进行区分,然后根据不同的Token来设置不同的颜色:
private View getView(UPDeviceCardDetail devCard) {
View containerRoot=localinflater.inflate(R.layout.view_card_cloud, null);
containerRoot.setBackgroundColor(devCard.getBackgroundColor());
if (devCard.getToken().equals("62000000000000000000001")) {//卡1
containRoot.setBackGroundResource(R.drawable.button_bg2) ;
}else if (devCard.getToken().equals("62000000000000000000001")) {//卡2
containRoot.setBackGroundResource(R.drawable.button_bg3) ;
}
return containerRoot;//卡区域所有要素(已添加属性)
}
containRoot.setBackGroundResource(R.drawable.button_bg2) ;