【问题标题】:Tint menu icons based on if condition根据 if 条件为菜单图标着色
【发布时间】:2020-01-11 19:53:39
【问题描述】:

我有一个工具栏:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/add_row"
        android:icon="@drawable/add"
        android:title="Add Row"
        />
    <item
        android:id="@+id/clear_row"
        android:icon="@drawable/clear"
        android:title="Clear"
        />
    <item
        android:id="@+id/submit_row"
        android:icon="@drawable/check"
        android:title="Save"
        />
</menu>

启用时,添加 (1) 和保存 (3) 按钮应为绿色。启用时,清除 (2) 应为红色。禁用时都应该是灰色的。 我似乎找不到一种方法来为这些着色。我在将工具栏添加到屏幕时使用了色调:

app:itemIconTint="@drawable/toolbar_selector"
app:itemTextColor="@drawable/toolbar_selector"

但是,这仅设置检查和标准颜色。 似乎没有办法指定透明 (2) 项目应为红色。这甚至可能吗?

【问题讨论】:

    标签: android xml kotlin


    【解决方案1】:

    您的意思是当您单击该图标时,它一旦变为绿色(启用),当再次单击时,它变为灰色(禁用)等等?那就试试这个吧。

    boolean isAddEnabled = false;
    boolean isClearEnabled = false;
    boolean isSubmitEnabled = false;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        toolbar.inflateMenu(R.menu.menu);
        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
    
                int itemId = item.getItemId();
    
                switch (itemId) {
                    case R.id.add_row:
    
                        if (!isAddEnabled) {
    
                            isAddEnabled = true;
    
                            item.getIcon().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
    
                            break;
                        }
                        else {
    
                            isAddEnabled = false;
    
                            item.getIcon().setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_ATOP);
    
                            break;
                        }
    
                    case R.id.clear_row:
    
                        if (!isClearEnabled) {
    
                            isClearEnabled = true;
                            item.getIcon().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
                            break;
                        }
                        else {
    
                            isClearEnabled = false;
                            item.getIcon().setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_ATOP);
                            break;
                        }
    
                    case R.id.submit_row:
    
                        if (!isSubmitEnabled) {
                            isSubmitEnabled = true;
                            item.getIcon().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
                            break;
                        }
                        else {
    
                            isSubmitEnabled = false;
                            item.getIcon().setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_ATOP);
                            break;
                        }
                }
                return true;
            }
        });
    }
    

    【讨论】:

    • 几乎 - 我确实想根据它们的启用进行更改,并有针对这些情况的案例,但我希望在加载屏幕时使用这些不同的颜色。因此,在按下按钮时更改颜色将不起作用。我会尝试在加载屏幕时做类似的事情并循环浏览这些项目。
    猜你喜欢
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2014-05-04
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    相关资源
    最近更新 更多