扩展appcompat textview样式

时间:2015-11-05 16:19:52

标签: android android-appcompat

我需要为我的应用程序中的所有TextView / Button设置自定义样式(我需要更改字体系列)

为了实现我的意图,我在我的App风格中编写了以下代码:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@null</item>
    <item name="android:textColor">@color/textColorPrimary</item>= 
    <item name="android:textViewStyle">@style/RobotoTextViewStyle</item>
    <item name="buttonStyle">@style/RobotoButtonStyle</item>

    <!-- <item name="android:typeface">monospace</item> -->
</style>

<style name="RobotoTextViewStyle" parent="android:Widget.TextView">
    <item name="android:fontFamily">sans-serif-condensed-light</item>
</style>

<style name="RobotoButtonStyle" parent="android:Widget.Holo.Button">
    <item name="android:fontFamily">sans-serif-condensed-light</item>
</style>

正如您所看到的,我正在使用AppCompat主题,但我无法弄清楚如何扩展正确的textview。事实上,我正在使用parent="android:Widget.Holo.Button",但这样我就失去了AppCompat按钮样式。

PS:使用该代码我的所有textview和按钮都会更改font-family,除了工具栏和NavigationView,这是正常的吗?

2 个答案:

答案 0 :(得分:0)

<style name="RobotoTextViewStyle" parent="Widget.AppCompat.AutoCompleteTextView">
    <item name="android:fontFamily">sans-serif-condensed-light</item>
</style>

<style name="RobotoButtonStyle" parent="Widget.AppCompat.Button">
    <item name="android:fontFamily">sans-serif-condensed-light</item>
</style>

答案 1 :(得分:0)

第1步) 将.ttf格式(Roboto-Black.ttf,Roboto-Bold.ttf,RobotoCondensed-Bold.ttf,Roboto-Regular.ttf等等)急需的字体文件的变体复制到'assets'目录。(创建一个,如果你还没有一个在'main'目录中。)

第2步) 在'xml'文件夹中创建一个名为'fonts.xml'的文件,该文件应位于'res'目录中。 (RES \ XML \ fonts.xml)。声明您的首选字体名称以匹配'assets'目录中匹配的文件名。

  <!-- Font with 10 styles defined -->
<family>
    <nameset>
        <name>rb_regular</name>
        <name>rb_bold</name>
        <name>rb_light</name>
        <name>rb_bolditalic</name>
        <name>rb_thin</name>
        <name>rb_medium</name>
        <name>rb_condensed_regular</name>
        <name>rb_condensed_light</name>
        <name>rb_condensed_bold</name>
        <name>rb_black</name>
    </nameset>
    <fileset>
        <file>Roboto-Regular.ttf</file>
        <file>Roboto-Bold.ttf</file>
        <file>Roboto-Light.ttf</file>
        <file>Roboto-BoldItalic.ttf</file>
        <file>Roboto-Thin.ttf</file>
        <file>Roboto-Medium.ttf</file>
        <file>RobotoCondensed-Regular.ttf</file>
        <file>RobotoCondensed-Light.ttf</file>
        <file>RobotoCondensed-Bold.ttf</file>
        <file>Roboto-Black.ttf</file>
    </fileset>
</family> 

在样式文件中定义它们,如下所示

//textviews
 <style name="TextViewRobotoRegular" parent="android:Widget.TextView">
    <item name="android:fontFamily"  tools:targetApi="jelly_bean">rb_regular</item>
</style>
<!-- Roboto-Bold-->
<style name="TextViewRobotoBold" parent="android:Widget.TextView">
    <item name="android:fontFamily" tools:targetApi="jelly_bean">rb_bold</item>
</style>
<!-- Roboto-Light-->
<style name="TextViewRobotoLight" parent="android:Widget.TextView">
    <item name="android:fontFamily" tools:targetApi="jelly_bean">rb_italic</item>
</style>
<!-- Roboto-BoldItalic-->
<style name="TextViewRobotoBoldItalic" parent="android:Widget.TextView">
    <item name="android:fontFamily" tools:targetApi="jelly_bean">rb_bolditalic</item>

</style>

//button
 <style name="RobotoRegular" parent="android:Widget.Button">
    <item name="android:fontFamily" tools:targetApi="jelly_bean">rb_regular</item>
</style>

最后在布局文件中使用它们

                     <TextView
                        style="@style/TextViewRobotoLight"
                        android:layout_width="75dp"
                        android:layout_height="30dp" />