0

我想在我的 Android 应用程序中定义一个自定义属性。

我已经定义了扩展 View 的 GifMovieView 类。

所有 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 为空。

此属性在 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" />

网址始终为空...

包名有错吗?packageName 是否必须更改?

提前TY,

阿德里亚诺。

4

2 回答 2

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)
于 2012-09-11T08:29:47.807 回答
0
  1. 在 values 文件夹中创建 attrs.xml 文件,它包含您所有的自定义属性

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <declare-styleable name="MyTextView">
        <attr name="font_name" format="string" />
    </declare-styleable>
</resources>

  1. 在 values 文件夹中创建 styles.xml,它将包含特定组件的样式,这里我以 Textview 为例,我将在 TextView 中设置字体名称属性

<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>

  1. 让我们创建 java 文件来使用我们的新属性,我将扩展 Textview,创建 mytextview.java

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();
}

}

  1. 新的我们可以在布局中使用名为“MyTextview”的新 Textview。

<YOUR PACKAGE NAME.MyTextView
        android:id="@+id/header_txtTitle"
        style="@style/Header_Text_Text1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/header_home"
        android:layout_marginTop="2dp"
        android:text="" />

于 2012-09-11T08:58:58.823 回答