【问题标题】:Applying style globally Android with theme and Style inheritance使用主题和样式继承在全球范围内应用样式
【发布时间】:2016-01-11 20:33:10
【问题描述】:

我正在尝试为整个应用程序创建基本主题,我已经为 EditTextButtonTextView 等基本组件创建了自定义样式,并希望在我的应用程序中全局设置它们。

这是我的xml 代码。

 <style name="AppThemeBase" parent="Theme.AppCompat.NoActionBar">
        <item name="colorPrimary">@color/base_app_color</item>
        <item name="colorPrimaryDark">@color/base_app_color</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="windowActionBarOverlay">true</item>
        <item name="windowActionModeOverlay">true</item>
        <item name="android:editTextStyle">@style/EditTextBaseStyle</item>
        <item name="android:textViewStyle">@style/TextViewBaseStyle</item>
    </style>

我的自定义编辑文本样式

<style name="EditTextBaseStyle" parent="Widget.AppCompat.EditText">
        <item name="android:textColor">@color/base_text_color</item>
        <item name="android:textSize">@dimen/text_size_edit_text</item>
        <item name="android:textColorHint">@color/base_hint_color</item>
        <item name="android:layout_centerHorizontal">true</item>
        <item name="android:background">@drawable/edit_text_rounded_corners_bg</item>
    </style>

我也尝试使用@android:style/Widget.EditText 作为父母。

<style name="TextViewBaseStyle" parent="@android:style/Widget.TextView">
    <item name="android:textColor">@color/base_text_color</item>
    <item name="android:textSize">@dimen/size_text_base</item>
    <item name="android:layout_margin">@dimen/margin_text_view_base</item>
</style>

当然还有AndroidManifest.xml文件

<application
    android:name=".application.QrApplication"
    android:allowBackup="true"
    android:icon="@drawable/ic_logo_green"
    android:label="@string/app_name"
    android:theme="@style/AppThemeBase">
    <activity
        android:name=".ui.activities.LoginActivity"
        android:configChanges="orientation|keyboardHidden"
        android:label="@string/app_name"
        android:noHistory="true"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

我有几个问题

  1. 为什么它不对每个视图(EditText 和 TextView)应用样式,如果在 xml 布局中手动设置样式,它就像一个魅力,但我无法让它在全局范围内工作
  2. 关于样式继承。有两种类型的继承显式或隐式或使用.(点)和使用关键字parent作为默认主题的用户自定义样式,但是如果像&lt;style name="SomeStyle.ParentStyle" parent="Widget.AppCompat.Button"&gt;这样组合这种类型的继承会怎样?
  3. 样式和主题是否应用于活动内部的片段,理论上应该是因为使用了来自活动的膨胀片段上下文,即ContextWrapper

如果您有任何想法可能导致此类问题,请帮助解决它或至少分享您的想法。

谢谢。

【问题讨论】:

    标签: android xml inheritance android-theme android-styles


    【解决方案1】:

    问题解决了

    而不是覆盖

    &lt;item name="android:editTextStyle"&gt;@style/EditTextBaseStyle&lt;/item&gt;

    我必须重写

    &lt;item name="editTextStyle"&gt;@style/EditTextBaseStyle&lt;/item&gt;

    要找出需要覆盖的样式项,请按照基本样式/主题的继承树,您会找到需要使用的样式项的名称。

    但请注意
    文本视图样式应该仍然是

    &lt;item name="android:textViewStyle"&gt;@style/TextViewBaseStyle&lt;/item&gt;

    这很奇怪,但就是这样。

    【讨论】:

      猜你喜欢
      • 2018-03-25
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      相关资源
      最近更新 更多