救命!我正在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 Styles and Themes