【问题标题】:How to define textAppearence value in android layout如何在android布局中定义textAppearence值
【发布时间】:2020-02-18 02:43:00
【问题描述】:

在我的布局中,我使用了 android:textAppearence 的预定义值。但是,正如我发现的那样,至少有两种方法可以定义它们,这会产生非常不同的结果(例如,不同的字体大小和 alphaweight 值):

  1. android:textAppearance:="@style/TextAppearance.MaterialComponents.Caption"。这个@style/... 值在(在我的情况下)文件中定义 ~/.gradle/caches/transforms-2/files-2.1/11ab83d2971a1126be493aa33fdd0f6e/material-1.1.0/res/values。例如,这被定义为:

    <style name="TextAppearance.MaterialComponents.Caption" parent="TextAppearance.AppCompat.Caption">
      <item name="fontFamily">sans-serif</item>
      <item name="android:fontFamily">sans-serif</item>
      <item name="android:textStyle">normal</item>
      <item name="android:textAllCaps">false</item>
      <item name="android:textSize">12sp</item>
      <item name="android:letterSpacing">0.0333333333</item>
    </style>
    
  2. android:textAppearance="@android:style/TextAppearance.Material.Menu"。这是定义在 /home/rudra/.Android/Sdk/platforms/android-29/data/res/values/styles_material.xml。这被定义为:

    <style name="TextAppearance.Material.Menu">
        <item name="textSize">@dimen/text_size_menu_material</item>
        <item name="fontFamily">@string/font_family_menu_material</item>
    </style>
    

对我来说主要问题是,我不确定使用哪一个来获得更一致的用户体验。我敢肯定,case 2 的文件不会随我的应用程序一起提供,但也许用户将拥有styles_material 用于他的 android-xx。但是通过了解material-1.0.01.1.0 的值如何变化,我有点怀疑是否依赖这些值,但我不确定。

另一方面,为所有可能的场景重新定义textAppearance 是一项相当大的工作。

所以,我正在寻找有关如何定义 textAppearence 以及在 case 1case 2 中的建议,我应该使用它来获得跨设备更一致的结果

【问题讨论】:

    标签: android android-layout android-layoutparams


    【解决方案1】:

    如果你想定义一个自定义的textAppearance,你可以定义如下。我用material-components-android

    style.xml

      <!-- Base application theme. -->
      <style name="AppTheme" parent="Theme.MaterialComponents.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryDarkColor</item>
        <item name="colorPrimaryVariant">@color/primaryLightColor</item>
        <item name="colorOnPrimary">@color/primaryTextColor</item>
        <item name="colorSecondary">@color/secondaryColor</item>
        <item name="colorSecondaryVariant">@color/secondaryDarkColor</item>
        <item name="colorOnSecondary">@color/secondaryTextColor</item>
    
        <!-- This line is important -->
        <item name="textAppearanceHeadline3">@style/TextAppearance.Headline3</item>
      </style>
    
      <style name="TextAppearance.Headline3" parent="TextAppearance.MaterialComponents.Headline3">
        <!-- Define your custom appearance here. -->
        <item name="fontFamily">@font/work_sans_black</item>
        <item name="android:textAllCaps">false</item>
        <item name="android:textSize">@dimen/text_size</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">@color/primaryTextColor</item>
      </style>
    

    您可以在布局中使用 this-TextAppearance.Headline3,如下所示。

           <TextView
              android:id="@+id/tvAppName"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@string/app_name"
              android:textAppearance="?attr/textAppearanceHeadline3"
              />
    

    这是我对自定义文本外观的使用。你可以随意定义。

    如果要自定义主题或样式,则必须了解常用属性。你可以在this article看到它。

    希望对你有所帮助。

    【讨论】:

      【解决方案2】:

      查看 TextView.java,似乎没有任何由 android:textAppearance 定义的属性无法直接在 TextView 上设置。因此,似乎没有任何技术原因需要使用它们来直接定义样式中的属性,至少在配置 TextView 外观的能力方面。

      这意味着您可以避免在布局和样式中使用它而不会产生任何不利影响,前提是您覆盖所有相关属性。基本主题为各种小部件定义了许多不同的标准 android:textAppearances,因此您应该检查所有小部件是否被正确覆盖。

      根据我的经验,如果您希望您的应用看起来集成到设备的其余部分,那么 android:textAppearance 最有用。所以如果你需要大文本,你可以使用 android:textAppearance="?android:attr/textAppearanceLarge" 现在你的文本很大!无需知道对于给定的设备/屏幕尺寸/等意味着多少 sp。

      但是,如果您的应用是高度样式化的,并且无论如何您都将覆盖所有文本大小,那么 android:textAppearance 的附加值就会​​降低。您当然可以按照上面帖子中的说明使用它,但如果这不适合您的样式系统,请随意省略它。它只是帮助您在所有设备上获得美观应用的另一种工具。

      如果您选择不使用应用,我还建议您额外确保在各种设备上试用您的应用,以确保您没有忽略覆盖默认的 android:textAppearance。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-04
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多