Có vẻ như RobotoAttributeSet
được tạo và chuyển đến chế độ xem tùy chỉnh sẽ không bao giờ được đọc hoặc xây dựng không chính xác.RoboAttributeSet của Robolectric không bao giờ được đọc
Đây là thử nghiệm của tôi:
ArrayList<Attribute> attributes = new ArrayList<>();
attributes.add(
new Attribute("com.package.name:attr/CustomButton_inputType",
String.valueOf(2), "com.package.name")); // no matter what value I use (2)
AttributeSet attrs =
new RoboAttributeSet(attributes, Robolectric.application.getResources(), CustomButton.class);
CustomButton button = new CustomButton(Robolectric.application, attrs);
Đây là tôi attr.xml
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomButton">
<attr name="inputType" format="enum">
<enum name="text" value="0"/>
<enum name="textEmailAddress" value="1"/>
<enum name="password" value="2"/>
</attr>
</declare-styleable>
</resources>
Một phần của CustomButton:
private void applyAttributes(Context context, AttributeSet attrs) {
TypedArray typedArray = context.getTheme()
.obtainStyledAttributes(attrs, R.styleable.CustomButton, 0, 0);
try {
int typeValue = // is always 0
typedArray.getInt(R.styleable.CustomButton_inputType, 0);
switch (typeValue) {
case 0:
// do something
break;
case 1:
// do something
break;
case 2:
// do something
break;
default:
// just do nothing
break;
}
} finally {
typedArray.recycle();
}
}
Vì vậy, không có vấn đề gì giá trị tôi đặt khi chuẩn bị các thuộc tính (nó là 2
trong ví dụ), tôi luôn nhận được 0
cho typeValue
.
Tôi có làm gì sai không? Cảm ơn rất nhiều!
Tôi đã cố gắng để thiết lập tương tự tại của tôi và cũng có thể xác nhận rằng styledArray trống. Tuy nhiên tôi thấy rằng nó không phải là trống khi tôi cố gắng thổi phồng xem từ hoạt động và tài nguyên xml. Bạn có cân nhắc về cách thử nghiệm này không? –
Tôi đã tạo một vé https://github.com/robolectric/robolectric/issues/1478 –