Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android自定义样式继承_Android_Xml_Xamarin_Fonts_Themes - Fatal编程技术网

Android自定义样式继承

Android自定义样式继承,android,xml,xamarin,fonts,themes,Android,Xml,Xamarin,Fonts,Themes,我有一个可定制主题的应用程序。用户当前可以在3个主题之间切换,每个主题都可以更改主显示区域的背景色、字体颜色和字体,但不能更改按钮或其他小部件。由于没有一种很好的方法来指定主题中的自定义字体,我的应用程序代码在重置主题的同时(使用SetTheme)切换字体(使用typeface.CreateFromAsset和TextView.typeface)。(我相信非Xamarin版本的字体是Typeface.createFromAsset,TextView.setTypeface和setTheme,顺便

我有一个可定制主题的应用程序。用户当前可以在3个主题之间切换,每个主题都可以更改主显示区域的背景色、字体颜色和字体,但不能更改按钮或其他小部件。由于没有一种很好的方法来指定主题中的自定义字体,我的应用程序代码在重置主题的同时(使用
SetTheme
)切换字体(使用
typeface.CreateFromAsset
TextView.typeface
)。(我相信非Xamarin版本的字体是
Typeface.createFromAsset
TextView.setTypeface
setTheme
,顺便说一句)但我注意到,与其他字体相比,这种别致的字体看起来更小,所以每当我使用该主题时,我都希望字体更大。因此,我创建了以下主题,它继承了我的主主题:

<style name="Theme.StoryvoqueFancy" parent="@style/Theme.StoryvoqueLight">
   <item name="android:textSize">18sp</item>
   <item name="android:lineSpacingExtra">5sp</item>
   <item name="android:textColorTertiary">#000000</item>
</style>

18便士
5便士
#000000
textSize属性实现了我希望它与主文本的匹配,使其更大。我搞不懂的是如何安排我的属性或样式,使其不影响其他文本。请注意,在我下面的截图中,当我使用这个主题时,按钮文本也变得越来越大

默认主题

花式主题

理想情况下,我想我希望主题能够指定仅适用于主视图的属性,例如:

<item name="mainViewTextSize">18sp</item>
18sp
然后我会从我的TextView中引用mainViewTextSize。或者我想使用:

<item name="textSizeTertiary">18sp</item>
18sp
因为textColor似乎会影响主视图中的文本,但不会影响按钮。但不存在这样的属性


我不确定这是否可行,或者我是否从错误的方向来处理此问题。

可以将文件
attrs.xml
添加到
Resources\values\
目录中,内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<resources>
   <attr name="mainViewTextSize" format="dimension"/>
</resources>
<style name="Theme.StoryvoqueFancy" parent="@style/Theme.StoryvoqueLight">
   <item name="mainViewTextSize">18sp</item>
   <item name="android:textColorTertiary">#000000</item>
</style>
<TextView
    android:id="@+id/descriptionText"
    android:layout_height="wrap_content"
    android:layout_width="match_parent" 
    android:textSize="?mainViewTextSize" />
我的axml文件包含以下内容:

<TextView
    android:id="@+id/descriptionText"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"            
    android:textAppearance="?mainViewStyle"
<?xml version="1.0" encoding="utf-8" ?>
<resources>
   <attr name="mainViewStyle" format="reference"/>
</resources>

可以使用以下内容将文件
attrs.xml
添加到
Resources\values\
目录中:

<?xml version="1.0" encoding="utf-8" ?>
<resources>
   <attr name="mainViewTextSize" format="dimension"/>
</resources>
<style name="Theme.StoryvoqueFancy" parent="@style/Theme.StoryvoqueLight">
   <item name="mainViewTextSize">18sp</item>
   <item name="android:textColorTertiary">#000000</item>
</style>
<TextView
    android:id="@+id/descriptionText"
    android:layout_height="wrap_content"
    android:layout_width="match_parent" 
    android:textSize="?mainViewTextSize" />
我的axml文件包含以下内容:

<TextView
    android:id="@+id/descriptionText"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"            
    android:textAppearance="?mainViewStyle"
<?xml version="1.0" encoding="utf-8" ?>
<resources>
   <attr name="mainViewStyle" format="reference"/>
</resources>

鉴于主题是全局的样式是局部的,您可能希望创建应用于
视图
级别而不是全局的特定样式


因此,您应该定义一个
文本外观
,您的样式将继承并最终应用于您的
视图
。如果您需要对样式进行任何自定义,您可以创建。

鉴于主题是全局的样式是局部的,您需要创建应用于
视图
级别而不是全局的特定样式


因此,您应该定义一个
文本外观
,您的样式将继承并最终应用于您的
视图
。如果您需要对样式进行任何自定义,您可以创建。

我允许用户选择应影响全局外观的备用全局样式。但是,当他们选择花式样式时,我需要细化在一个特定视图上发生的情况,因为我只希望在该样式处于活动状态时,将大小和行距应用于一个视图。我不清楚你的回答是否解决了这个问题——如果是的话,我可能需要更多的细节。我想,我有点理解了你的建议,并将其添加到我的回答中。我有点不确定lineSpacingExtra的位置。但一切看起来都和我想要的差不多。不过,如果我遗漏了你的部分观点,我愿意进行改进。这与我的建议非常接近。我允许用户选择其他全局样式,这将影响全局外观。但是,当他们选择花式样式时,我需要细化在一个特定视图上发生的情况,因为我只希望在该样式处于活动状态时,将大小和行距应用于一个视图。我不清楚你的回答是否解决了这个问题——如果是的话,我可能需要更多的细节。我想,我有点理解了你的建议,并将其添加到我的回答中。我有点不确定lineSpacingExtra的位置。但一切看起来都和我想要的差不多。不过,如果我遗漏了你的部分观点,我愿意进行改进。这与我的建议非常接近。