Android 如何自定义用户界面与自定义属性?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

我知道可以创建自定义UI元素(通过视图或特定的UI元素扩展)。但是,是否有可能为新创建的UI元素定义新的属性或属性:

<com.tryout.myCustomElement
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Element..."
   android:myCustomValue=<someValue>
/>
提问于
用户回答回答于

1.创建一个属性XML

在里面创建一个新的XML文件/res/values/attrs.xml,使用属性和类型:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <declare-styleable name="MyCustomElement">
        <attr name="distanceExample" format="dimension"/>
    </declare-styleable>
</resources>

2.使用布局中的属性

这种方式与上述相同,只有一个例外。您的自定义属性需要它自己的XML名称空间:

<com.example.yourpackage.MyCustomElement
   xmlns:customNS="http://schemas.android.com/apk/res/com.example.yourpackage"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Element..."
   customNS:distanceExample="12dp"
   />

3.利用你通过的值

修改自定义视图的构造函数以解析值:

public MyCustomElement(Context context, AttributeSet attrs) {
    super(context, attrs);

    TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCustomElement, 0, 0);
    try {
        distanceExample = ta.getDimension(R.styleable.MyCustomElement_distanceExample, 100.0f);
    } finally {
        ta.recycle();
    }
    // ...
}

用户回答回答于

在你的res / values文件夹中创建attr.xml。在那里你可以定义你的属性:

<declare-styleable name="">
    <attr name="myCustomValue" format="integer/boolean/whatever" />
</declare-styleable>

当你想在你的布局文件中使用它时,你必须添加:

xmlns:customname="http://schemas.android.com/apk/res/your.package.name"

扫码关注云+社区