我想在Android应用中定义一个自定义属性。
我定义了GifMovieView类,它扩展了View。
所有3个构造函数都调用init(AttributeSet attrs)方法:
if (attrs != null) {
String packageName = "http://schemas.android.com/apk/res/android";
mUrl = attrs.getAttributeValue(packageName, "url");
Log.i("TAG_MIO", mUrl);
}
Log.i抛出异常,因为mUrl为null。
此属性在mainActivity_layout.xml中以这种方式定义:
<com.example.propertyproject.GifMovieView
android:id="@+id/my_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
gif:url="http://mygif.com/mygif.gif" />
url始终为null ...
包名是不是错了? packageName是否必须更改?
提前TY,阿德。
答案 0 :(得分:0)
*_layout.xml
用于定义GUI的布局,而不是用于定义自定义字符串。
还有另一个地方,它位于res/values/strings.xml
。如果strings.xml
不存在,请使用以下内容创建它:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="gif_url">http://mygif.com/mygif.gif</string>
</resources>
然后您可以使用
访问它String url = R.string.gif_url; // (it becomes a static final property)
答案 1 :(得分:0)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyTextView">
<attr name="font_name" format="string" />
</declare-styleable>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyTextView">
<attr name="font_name" format="string" />
</declare-styleable>
</resources>
<style name="Header_Text_Text1">
<item name="android:textColor">@color/text1_header_text</item>
<item name="android:textSize">26px</item>
<item name="android:textStyle">bold</item>
<item name="android:padding">2dp</item>
<item name="[YOUR PACKAGE NAME]:font_name">calibri</item>
</style>
<style name="Header_Text_Text1">
<item name="android:textColor">@color/text1_header_text</item>
<item name="android:textSize">26px</item>
<item name="android:textStyle">bold</item>
<item name="android:padding">2dp</item>
<item name="[YOUR PACKAGE NAME]:font_name">calibri</item>
</style>
public class MyTextView extends TextView {
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
if (isInEditMode())
return;
final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MusicTextView);
final String ttfName = ta.getText(0).toString();
Log.i("Font Name :" + ttfName);
ta.recycle();
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
if (isInEditMode())
return;
final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MusicTextView);
final String ttfName = ta.getText(0).toString();
Log.i("Font Name :" + ttfName);
ta.recycle();
}
}