【问题标题】:Override theme color for touch highlight, scroll hinting覆盖触摸高亮、滚动提示的主题颜色
【发布时间】:2014-01-29 09:49:16
【问题描述】:

我正在尝试用公司主题的默认触摸突出显示颜色替换和覆盖。

我已经通过在我的主题属性上使用 actionBarItemBackground 成功地为操作栏按钮完成了它,但我正在查看一个应用程序范围的更改,其中按钮、操作栏、抽屉或菜单中的每个按下的元素都默认为我的颜色而不是 Holo蓝色。我已经尝试过像 colorPressedHighlight 这样的属性。 colorFocusedHighlight 但没有任何效果。

我还想更改滚动结束提示的颜色,即当可滚动元素到达一端并且用户仍在尝试滚动时,其两侧的小渐变。

鉴于大量不正确的答案,让我再次重申。我知道选择器是什么,我知道如何使用它,我已经明确声明我已经用几个不同的子属性覆盖了主题,但没有一个能满足我的要求。我正在寻找属性来更改所有元素的默认触摸高亮和滚动缓存提示的颜色,同样适用于所有元素。

【问题讨论】:

  • 我不敢相信没有一个实际的、明确的答案。这是一件非常基本的事情,任何解决方案似乎都如此复杂、模糊或模糊,你会认为谷歌正在竭尽全力让它变得困难。逆天。 android视图层很烂。期间。

标签: android theming


【解决方案1】:

要更改滚动结束提示,您可以尝试使用this 库来获得一个奇特的解决方案,或者只使用下面的代码来获得一个快速的解决方案(code source and explanation):

static void brandGlowEffect(Context context, int brandColor) {
    int glowDrawableId = context.getResources().getIdentifier("overscroll_glow", "drawable", "android");
    Drawable androidGlow = context.getResources().getDrawable(glowDrawableId);
    androidGlow.setColorFilter(brandColor, PorterDuff.Mode.MULTIPLY);
}

请注意,这两者从根本上来说有点 hacky,因为它们在平台可绘制资源上工作,保证在 Android 版本之间保持不变,但要注意的是,这些资源还没有被从 1.0 重命名为 KitKat。

【讨论】:

    【解决方案2】:

    我在这里找到了答案:https://stackoverflow.com/a/9062723/1266326

    组件的名称不是滚动提示而是过度滚动。

    【讨论】:

      【解决方案3】:

      您要做的是将 custom_color.xml 文件添加到您的应用程序可绘制文件夹中。你可以随意命名它,它可能看起来类似于

      <?xml version="1.0" encoding="utf-8"?>
      <selector
          xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:state_pressed="true" >
          <shape>
              <gradient
                  android:startColor="#004F81"
                  android:endColor="#004F81"
                  android:angle="270" />
              <stroke
                  android:width="3dp"
                  android:color="#004F81" />
              <corners
                  android:radius="3dp" />          
          </shape>
      </item>
      <item android:state_focused="true" >
          <shape>
              <gradient
                  android:endColor="#004F81"
                  android:startColor="#004F81"
                  android:angle="270" />
              <stroke
                  android:width="3dp"
                  android:color="#004F81" />
              <corners
                  android:radius="3dp" />         
          </shape>
      </item>
      <item>        
          <shape>
              <gradient
                  android:endColor="#43AFE8"
                  android:startColor="#43AFE8"
                  android:angle="270" />
              <stroke
                  android:width="1dp"
                  android:color="#43AFE8" />
              <corners
                  android:radius="6dp" />
              <padding
                  android:left="2dp"
                  android:top="2dp"
                  android:right="2dp"
                  android:bottom="2dp" />
          </shape>
      </item>
      </selector>
      

      然后在您的所有布局 xml 文件中,只需将每个元素的后轮设置为您的自定义后轮

      <Button
              android:id="@+id/button"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:background="@drawable/custom_color"
              android:textColor="#FFFFFF"
              android:text="Button" />
      

      我目前正在实施这个并且效果很好。

      【讨论】:

      • 虽然这是一个可行的解决方案,但它降低了可维护性,而且工作量很小。有一个主题属性,您可以让所有按钮都继承这种样式,但我正在寻找更通用的东西。
      【解决方案4】:

      您可以阅读here 关于State List
      基本上你想要做的是创建一个选择器,用你的颜色覆盖颜色,然后创建一个作为默认全息主题的“子”主题,并使用选择器更改要更改颜色的元素。这将为您提供更广泛的应用解决方案。 阅读Style and Themes here

      【讨论】:

      • 鉴于您尚未阅读 OP 或任何其他答案:哪些属性是覆盖我要求的元素的属性。还没有人给出这个答案。
      【解决方案5】:

      我想正确的答案应该是“不,没有可以在您自己的主题中覆盖的主题属性,它会神奇地改变您应用的活动和片段的突出显示颜色”。或者,在我的情况下,“不,没有可以引用的主题属性来获取当前主题的突出显示颜色”。

      至于“Why?”,我猜这是因为 Google 本身并未在所有标准 UI 小部件(TextView、EditText、Button、ListView 等)中使用主题属性,因为它们依赖于 PNG 可绘制对象(9 个补丁),而不仅仅是状态列表。

      不过,这个问题很好。

      【讨论】:

      • L 显然有一个。
      【解决方案6】:

      您可以在此处设置样式:http://android-holo-colors.com/

      然后下载、集成并设置到您的应用中。

      【讨论】:

      • 我已经尝试过了,但它不包括滚动提示或抽屉。
      • 对于那个滚动问题,您可以定义您的自定义滚动。像这样:
      • 我会编辑它,但是有一个同事进来了。这里的代码:对于那个滚动问题,您可以定义您的自定义滚动。像这样:schemas.android.com/apk/res/android" >
      • 和下面的人一样,我需要在哪里嵌入它以在主题范围内应用它,而不是创建颜色可绘制的代码。
      • 自动化工具有很好的例子,但我更想知道变化来自哪里以及为什么来,因为我无法手动重现它。
      猜你喜欢
      • 2012-01-03
      • 2020-02-13
      • 2022-01-15
      • 2021-12-06
      • 1970-01-01
      • 2019-12-29
      • 2014-06-18
      • 1970-01-01
      • 2021-06-06
      相关资源
      最近更新 更多