救命!我正在VS2017上使用Xamarin,我正在尝试实现以下目标:

一个MyHeading类,可以像普通TextView类一样在任何地方使用,除了任何MyHeading实例将继承仅为MyHeading定义的padding / margin / styles / font等。

我迷路了,没有运气,在Google上找不到任何有用的东西。

我创建了MyHeading.cs,它继承自TextView:

public class MyHeading : TextView
{
    public MyHeading(Context context) : base(context)
    {

    }
}


然后,我还在包含以下XML的Resources / layout文件夹中创建了myheading.xml:

<?xml version="1.0" encoding="utf-8"?>
<com.my.app.MyHeading
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/mygrey"
android:textSize="18dp"
android:textStyle="bold"
android:typeface="sans"
android:gravity="center"
android:layout_marginTop="20dp"
android:layout_marginBottom="10dp" />


请帮忙!我怎样才能达到这样一个简单的要求,即在每次使用时都具有相同样式的可重复使用的TextView。

使用上面的代码,该项目成功构建,但是当我运行它时,它会爆炸:

Java.Lang.NoClassDefFoundError: android.support.v7.appcompat.R$drawable

最佳答案

正如评论所暗示的(以及我自己),在Android上创建style比创建View子类更合适,也更常见。



资源/值/styles.xml

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <style name="MyHeadingStyle" parent="android:Widget.TextView">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textColor">@color/red</item>
        <item name="android:textSize">18dp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:typeface">sans</item>
        <item name="android:gravity">center</item>
        <item name="android:layout_marginTop">20dp</item>
        <item name="android:layout_marginBottom">10dp</item>
    </style>
    ~~~ other styles ~~~
</resources>


AXML示例:

<TextView
    android:text="StackOverFlow"
    style="@style/MyHeadingStyle" />


输出:

android - 覆盖Android View MyHeading:TextView-LMLPHP

回复:Android Styles and Themes

10-07 23:04