【问题标题】:Overflow dots not changing colour溢出点不改变颜色
【发布时间】:2015-07-11 11:47:49
【问题描述】:

我活动的溢出点保持白色,因此在使用下面的代码时不会改变颜色。有谁知道如何解决这个问题?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wc_bank);

    ActionBar actionBar = getSupportActionBar();

    getSupportActionBar().setElevation(0);

    //change background colour of action bar
    actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#66CCCC")));
    //change text colour of action bar
    actionBar.setTitle(Html.fromHtml("<font color='#000099'>Hello World</font>"));

    //change colour of action bar back arrow
    final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
    upArrow.setColorFilter(getResources().getColor(R.color.blue), PorterDuff.Mode.SRC_ATOP);
    getSupportActionBar().setHomeAsUpIndicator(upArrow);

    //enable and show action bar back arrow
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(false);

    final Drawable overflowDots = getResources().getDrawable(R.drawable.abc_ic_menu_moreoverflow_mtrl_alpha);
    overflowDots.setColorFilter(getResources().getColor(R.color.piccadilly), PorterDuff.Mode.SRC_ATOP);
}

【问题讨论】:

  • 你实际在哪里使用这个 Drawable?
  • 你能告诉我们你是如何使用它的吗?现在我看到你得到了一个 Drawable 实例并设置了一个颜色过滤器,但我看不到你在哪里使用这个 drawable,比如ImageViewMenuItem
  • 但是如何?请在ActionBar 中发布您用于设置此 Drawable 的代码
  • 上面刚刚发布的代码

标签: java android android-activity android-studio


【解决方案1】:

问题是您没有对着色的 Drawable 做任何事情。你得到了一个 abc_ic_menu_moreoverflow_mtrl_alpha 图标的实例,并在其上设置了一个 ColorFilter,但实际上你并没有在任何地方使用该 Drawable。

不幸的是,也没有一个好的方法可以将Drawable 对象设置为溢出菜单图标。如果您坚持在您的 Java 代码中执行此操作,您可以 use this answer 来完成此操作,但这很 hacky。

首选方法是使用自定义样式和android:actionOverflowButtonStyle 主题属性来引用Drawable资源。这意味着如果您使用此选项,您需要创建一个具有正确颜色的新资源,并将其包含在您的可绘制资源文件夹中。您的主题最终将如下所示:

<style name="Your.Theme" parent="@android:style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:actionOverflowButtonStyle">@style/Your.Theme.OverflowStyle</item>
</style>

<style name="Your.Theme.OverflowStyle" parent="@android:style/Widget.AppCompat.ActionButton.Overflow">
    <item name="android:src">@drawable/your_overflow_icon</item>
</style>

【讨论】:

  • 您可以创建一个仅由该 Activity 使用的主题。您可以将 android:theme 应用于清单中的特定 &lt;activity&gt; 元素。
  • 请记住,我正在为我的应用程序使用 AppCompat 主题。我需要做什么具体的事情?
  • 不,我相信那里的属性是一样的。
  • 不幸的是,这对我不起作用。请查看上面的截图。
  • 啊,我明白了。我已经更新了答案,尝试将溢出样式的父样式更改为Widget.AppCompat.ActionButton.Overflow
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
相关资源
最近更新 更多