我在xml中有自己的自定义组件,就像这样编写
<com.app.components.CustomComponent
android:id="@+id/component"
android:layout_width="96dp"
android:layout_height="96dp"
android:scaleType="fitCenter"/>
ATTRS:
<declare-styleable name="CustomComponent">
<attr name="android:scaleType"/>
</declare-styleable>
我的自定义组件构造函数如下所示
@Bind(R.id.imageView) ImageView imageView;
@Bind(R.id.progressBar) ProgressBar progressBar;
public CustomComponent(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FunGuideImageView, 0, 0);
// how to correctly get scale type defined in xml ?
int scaleType = a.getValue(R.styleable.CustomComponent_android_scaleType,
ImageView.ScaleType);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.imageview, this, true);
ButterKnife.bind(view);
imageView.setScaleType( scaleType );
}
如何获取在xml中定义的scaleType并将其设置为我的imageView?
答案 0 :(得分:1)
鉴于前两个文件,您必须进行以下更改才能使其正常工作:
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomComponent, 0, 0);
int scaleTypeIndex = a.getValue(R.styleable.CustomComponent_android_scaleType, -1);
然后你可以让ImageView.ScaleType
数组执行以下操作:
if(scaleTypeIndex > -1) {
ImageView.ScaleType[] types = ImageView.ScaleType.values();
ImageView.ScaleType scaleType = types[scaleTypeIndex];
imageView.setScaleType(scaleType);
}
请务必在使用后废弃TypedArray
。