【问题标题】:Material design inverse spinner/edittext theme using AppCompat使用 AppCompat 的材料设计反向微调器/edittext 主题
【发布时间】:2014-12-25 22:29:14
【问题描述】:

我在使用 AppCompat v21 主题创建 Material Design 应用时遇到问题。首先,我的应用程序主题使用带有深色操作栏的 AppCompat 灯。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Main theme colors -->
    <!--   your app branding color for the app bar -->
    <item name="colorPrimary">@color/theme_color</item>
    <!--   darker variant for the status bar and contextual app bars -->
    <item name="colorPrimaryDark">@color/theme_color_dark</item>
    <!--   theme UI controls like checkboxes and text fields -->
    <item name="colorAccent">@color/theme_color_accent</item>
</style>

我的应用程序的颜色品牌非常暗,这就是我使用 DarkActionBar 变体的原因。我的问题是我有几个布局,我想将SpinnerEditText 放在背景是我的theme_color 的布局中,它是黑暗的。这会导致Spinner/EditText 在深色背景上带有黑色。如何使这些控件的样式/主题使用深色变体,以便它们显示为白色文本而不是黑色文本。更糟糕的是,我需要微调器显示白色文本,但微调器的下拉项显示浅色版本。

【问题讨论】:

标签: android android-edittext spinner android-appcompat material-design


【解决方案1】:

我在深色背景的工具栏中使用 Spinner,并记得 Google I/O Android 应用也是如此,所以我查看了它的样式 - 更具体地说,是 ActionBarThemeOverlay here

在我的主题上使用以下属性后,我的 Spinner 背景颜色(“箭头”)发生了变化:

<item name="colorControlNormal">#fff</item>
<item name="colorControlHighlight">#3fff</item>

colorControlHighlight 是用户按下 Spinner 时的颜色。不过,我没有在 EditText 上进行测试。

【讨论】:

    【解决方案2】:

    因此,您正在寻找一种将不同主题应用于选择视图的方法。 对于大多数元素(Toolbar 除外,您已经知道),没有仅 xml 的方法可以做到这一点

    您必须使用 ContextThemeWrapper 手动扩充视图:

    ContextThemeWrapper wrapper = new ContextThemeWrapper(getActivity(),
        R.style.Theme_AppCompat); // The dark one
    LayoutInflater footPump = LayoutInflater.from(getActivity()).cloneInContext(wrapper);
    // Note null as second argument -- if you pass in parent view, theme will
    // be taken from the parent
    Spinner spinner = (Spinner) footPump.inflate(R.layout.spinner, null);
    

    要获得充气机的布局资源,只需创建一个单视图 xml 文件:

    <!-- res/layout/spinner.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    <Spinner xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    

    【讨论】:

      【解决方案3】:

      这个怎么样..

      为您的小部件制作样式,例如:

      <style name="CustomEditText" parent="android:Widget.EditText">
            <item name="android:textColor">@color/red</item>
      </style>
      

      然后在您的 xml 中将此属性添加到您的 EditText

      style="@style/CustomEditText"
      

      【讨论】:

      • 我可以,但这很可能会导致一些科学怪人控制。我的意思是最好使用 AppCompat 的暗控件。因为那样的话,一切都会被正确地剥皮。我只是不知道如何将 AppCompat dark 用于几个控件
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多