형식 속성 값 'android : drawable'이 유효하지 않습니다.
내 버튼에 사용자 지정 속성을 만들려고하는데 속성 선언에서 이미지에 어떤 형식을 사용해야하는지 모르겠습니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TCButton">
<attr name="Text" format="string"/>
<attr name="BackgroundImage" format="android:drawable" />
</declare-styleable>
</resources>
error is in the format = "android : drawable"...
당신이 사용할 수있는 형식 = "정수" 의 자원 ID 드로어 블, 그리고 AttributeSet.getDrawable (를 ...) .
여기에 예가 있습니다.
res / values / attrs.xml에서 속성을 정수로 선언합니다.
<resources>
<declare-styleable name="MyLayout">
<attr name="icon" format="integer" />
</declare-styleable>
</resources>
레이아웃에서 속성을 드로어 블 ID로 설정합니다.
<se.jog.MyLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
myapp:icon="@drawable/myImage"
/>
사용자 정의 위젯 구성 요소 클래스의 속성에서 드로어 블을 가져옵니다.
ImageView myIcon;
//...
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyLayout);
Drawable drawable = a.getDrawable(R.styleable.MyLayout_icon);
if (drawable != null)
myIcon.setBackgroundDrawable(drawable);
가능한 모든 옵션을 보려면 여기 에서 android src를 확인 하십시오.
나는 그것을 간단한 참조로 사용하는 것이 더 나을 것이라고 생각합니다.
<declare-styleable name="TCButton">
<attr name="customText" format="string"/>
<attr name="backgroundImage" format="reference" />
</declare-styleable>
그리고 다음과 같이 xml에 설정하십시오.
<your.package.name.TCButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
custom:customText="Some custom text"
custom:backgroundImage="@drawable/myImage"
/>
그리고 클래스에서 다음과 같은 속성을 설정하십시오.
public TCButton(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MembershipItemView, 0, 0);
String customText;
Drawable backgroundImage;
try {
customText = a.getString(R.styleable.TCButton_customText);
backgroundImage = a.getDrawable(R.styleable.TCButton_backgroundImage);
} finally {
a.recycle();
}
if(!TextUtils.isEmpty(customText)) {
((TextView)findViewById(R.id.yourTextView)).setText(customText);
}
if(null != backgroundImage) {
((ImageView)findViewById(R.id.yourImageView)).setBackgroundDrawable(backgroundImage);
}
}
PS: Don't forget to add this line for the root element of the layout you are using your custom view in
xmlns:custom="http://schemas.android.com/apk/res-auto"
If you don't set this, you won't be able to access your custom attributes.
From AOSP code, I found how google engineers declare ImageView#src
attr.
<declare-styleable name="ImageView">
<attr name="src" format="reference|color" />
<attr name="scaleType">
<enum name="matrix" value="0" />
<enum name="fitXY" value="1" />
<enum name="fitStart" value="2" />
<enum name="fitCenter" value="3" />
<enum name="fitEnd" value="4" />
<enum name="center" value="5" />
<enum name="centerCrop" value="6" />
<enum name="centerInside" value="7" />
</attr>
<attr name="adjustViewBounds" format="boolean" />
<attr name="maxWidth" format="dimension" />
<attr name="maxHeight" format="dimension" />
<attr name="tint" format="color" />
<attr name="baselineAlignBottom" format="boolean" />
<attr name="cropToPadding" format="boolean" />
<attr name="baseline" format="dimension" />
<attr name="drawableAlpha" format="integer" />
<attr name="tintMode" />
</declare-styleable>
Above code is a sample and it can cover most case in our development.
참고URL : https://stackoverflow.com/questions/3487247/format-attribute-value-androiddrawable-not-valid
'developer tip' 카테고리의 다른 글
macOS에 Composer 설치 오류 (JIT 컴파일 실패) (0) | 2020.11.29 |
---|---|
자바 스크립트에서 배열을 배열로 스플 라이스하는 더 좋은 방법 (0) | 2020.11.29 |
jQuery / CSS를 사용하여 모든 요소 중 가장 높은 요소 찾기 (0) | 2020.11.29 |
최소 8 자, 숫자 1 개, 대문자 1 개 및 소문자 1 개를 포함하는 비밀번호에 대한 javascript regex (0) | 2020.11.29 |
Android 지원 작업 표시 줄로 AppCompat.Translucent 유형 테마를 얻는 방법은 무엇입니까? (0) | 2020.11.29 |