【问题标题】:How can I change color state of an ImageView based on an empty test of an EditText line?如何根据 EditText 行的空测试更改 ImageView 的颜色状态?
【发布时间】:2015-10-28 03:28:27
【问题描述】:

EditText 行为空白(默认)时,我希望ImageView 图标颜色为白色。

按下图标时,我希望颜色为黑色,然后恢复为白色,因为按下会清除 EditText 行,所以它会再次为空。

使用ImageView,我首先将src 设置为等于白色drawable。关于如何根据EditText 行的长度测试来切换颜色状态有什么想法吗?

【问题讨论】:

  • 对于edittext,你需要实现textwatcher来监听textchanges。 stackoverflow.com/questions/8699569/…
  • 所以在 onTextChanged 之后添加代码会改变 setBackgroundColor?
  • 最好在afterTextChanged 中执行此操作,请参阅提供的链接中的第二个答案。不是公认的答案。并在按钮单击时更改颜色,您只需要设置选择器。这样当它的状态改变时,相对的drawable就会被自己选中。看到这个链接stackoverflow.com/questions/14023886/android-button-selector
  • 好的,谢谢,我去看看。

标签: android android-edittext android-imageview android-drawable


【解决方案1】:

我不太确定问题是什么,当你引入 ImageView 并悬停时我感到困惑,因为我不相信手机也支持 onHoverListener .. 你的意思是在什么时候改变 EditText 强调色你点击它输入一些东西?如果是这样,它将在 colors.xml-->colorAccent

另外,如果您要更改图像背景颜色

 public void onClick(View v) {
                imageView.setBackgroundColor(Color.parseColor(EditText.getText().toString()));
        }

希望我为您继续您的项目提供了一些帮助。

【讨论】:

  • 很抱歉造成混淆。我想悬停我一直在考虑鼠标光标,因为我一直在使用模拟器进行开发。我将编辑我的答案以删除悬停参考。对于颜色从白色变为黑色然后再变为白色,我是否应该从我的 xml 布局文件中删除“android:src="drawable/..." 行,然后按照您在 Activity 文件中以编程方式建议的方式删除 setBackgroundColor?跨度>
  • 我想象的是你有一个 ImageView 和一个 EditText,如果你有一个空的 EditText,那么 ImageView 将是白色的。当在 ImageView 上点击 EditText 时会变成黑色?
  • 差不多。 EditText 行开始为空,图标为白色。当用户将数据输入到 EditText 行时,该行不再是空白,所以我希望 ImageView 更改为黑色。
【解决方案2】:

如果 textview 为空,要更新图标,请检查 Android: How can I validate EditText input?addTextChangedListener() 然后

 public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                Log.i("Text", charSequence + "");
                if(charSequence.length()==0)
                    ib.setImageResource(R.drawable.button_unpressed);
                else
                    ib.setImageResource(R.drawable.button_pressed);
            }

要更改图像按钮背景,请遵循其状态 How to set image button backgroundimage for different state? 与“在您的可绘制对象中创建 xml”

如果你想让图标的颜色在按下后保持黑色,只需通过

覆盖 onClick()
ib.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ib.setImageResource(R.drawable.button_pressed);
            }
        });

【讨论】:

  • 这些答案是否适用于 ImageView 以及您建议的按钮?
  • ImageView 否。 ImageView 和 ImageButton 基本上只是通过 onClick 动作不同。在这种情况下你应该使用 ImageButton/Button
  • 好的,我会研究一下 onClick 的区别,但为什么你推荐使用 ImageButton 而不是 ImageView?
  • 因为“当图标被按下时”...ImageButton 支持它,你也可以通过 xml 自定义它的drawable
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 2021-01-20
  • 2021-10-31
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多