如何创建支持android中所有视图的自定义属性?

时间:2017-06-02 05:40:15

标签: android android-layout material-design

在Android中,XML用于设计用户界面。 Android为每个标记提供了一组属性[例如:id,layout_width,layout_height]。

但是,是否有可能在Android中为所有标签添加新属性。

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/search_result"
    extra = "This is search field"
    useOfThisTag = "Search Operation"
    etc...
 />

2 个答案:

答案 0 :(得分:2)

这取决于你想要达到的目标。官方Android实现中没有全局属性。你提到的有两种:

  1. 查看属性:id,tag,background,padding等。这些属性由View类解释,看起来是全局的,因为您在xml布局文件中看到的几乎所有内容都会扩展View。

  2. 布局属性:宽度,高度,边距等。此组始终由父布局解释。如果在LinearLayout中放置一个视图,那么对于该视图,您可以使用LinearLayout.LayoutParams声明的属性。

  3. 如果您想添加真正的全局属性,可以尝试书法的方法。它是一个库,它为所有文本视图添加了对自定义字体的支持。他们的作者在解析视图标签时使用自定义ContextWrapper和资源解析器来拦截Calligraphy的属性。

    这与包含,片段,布局和合并标记在属性级别上的工作方式非常相似。这些标记是全局的,在LayoutInflater中进行解析和处理。

答案 1 :(得分:-1)

为自定义属性

创建 attrs.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="ColorOptionsView">
        <attr name="titleText" format="string" localization="suggested" />
        <attr name="valueColor" format="color" />
    </declare-styleable>

</resources>

activity_main.xml :包含textview的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
<!-- define new name space for your attributes -->
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
<!-- Assume that this is your new component. It uses your new attributes -->
        <com.example.vishva.CustomTextview
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            custom:titleText="Background color"
            custom:valueColor="@android:color/holo_green_light"
             />

</LinearLayout>

您还必须创建扩展Textview类

的CustomTextview类