【问题标题】:How to create custom attribute of TextView in android如何在android中创建TextView的自定义属性
【发布时间】:2017-08-18 05:06:44
【问题描述】:

您好,我正在学习如何为 android 应用程序创建库。我从自定义textview 开始并在其上设置自定义字体。

<TextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:fontFamily="@font/lobster"/>

这里我想取fontFamily这种格式@font/font_name的值。开发者需要在res 文件夹中创建字体文件夹并将字体放在那里。我需要为此做些什么。?提前致谢。

我使用以下方法创建了自定义属性。

attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="Typekitable">
        <attr name="fontFamily" format="string" />
    </declare-styleable>
</resources>

【问题讨论】:

  • 您不能创建自己的资源类型,例如font。不过,您可以将字体文件放在assets/ 中,并将属性保留为string,或者可能将它们放在raw/ 中,并将属性设置为integer
  • @MikeM。是的,我同意我们不能。我没有在应用程序中这样做。我正在创建一个库,并希望允许开发人员使用这种方法在 android 中的 textview 上设置自定义字体。
  • 您不能在res/ 下放置任何不属于已定义资源类型的文件夹。
  • @MikeM。谷歌最近推出了同样的developer.android.com/preview/features/working-with-fonts.html 他们是怎么做的
  • 啊,真漂亮。我还没有看到那个。无论如何,他们是如何做到的,他们定义了一种新的资源类型,现在显然可以从 Android O 开始使用。他们构建了框架,所以,你知道,他们可以添加任何他们想要的东西。但是,您无法定义自己的资源类型,因此在 O 之前不可能使用 font 资源。在 O 中,我想您可以像创建任何类型的 font 一样创建自定义属性其他属性。

标签: android


【解决方案1】:

你可以用这个:

1- 像这样创建枚举:

<attr name="fontFamily" format="enum" >
    <enum name="tahoma" value="1"/>
</attr>

2-

<declare-styleable name="MyTextView">
    <attr name="fontFamily"/>
</declare-styleable>

3 -

public class MyTextView extends TextView {


    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        TypedArray a = context.obtainStyledAttributes(attrs,
                R.styleable.MyTextView, defStyle, 0);
        int fontOrdinal = a.getInt(R.styleable.MyTextView_fontFamily, 0);
        //....
        a.recycle();

    }

}

使用时:

<MyTextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:fontFamily="tahoma"/> // you can use ctrl+space

默认情况下,您不能在 Res 中创建自定义文件夹。为此,请参阅以下链接:

With two res directories per build variant, Gradle stopped tracking changes in resource files

【讨论】:

  • 艾哈迈德,我认为这与我正在寻找的有点不同。无论如何,让我改写我的话。我正在创建一个 android 库,我希望通过它允许开发人员在 res 目录中创建 font 目录并将 TTF 文件保存在那里。然后开发者可以这样使用“@font/lobster”——这里font是目录,lobsterfont目录下的TTF文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2011-10-23
  • 1970-01-01
  • 2011-01-03
相关资源
最近更新 更多