1

私がやりたいのは、EditText の状態 (実際には背景) を変更して、その内容の有効性を反映することです。たとえば、ユーザーが 999 を入力した場合、999 は文脈上無効であり、EditText にはデフォルトのオレンジ色の境界線の代わりに赤い境界線が必要です。同様に、テキストが有効になると、緑色の境界線が必要になります。

私が調査した方法:

  1. editText のスタイルを、editor.setStyle(R.styles.SomeID) などを介してプログラムで変更します。Androidでは不可能のようです。
  2. カスタム状態 (state_valid、state_invalid) を R.attr に追加し、それらを赤/緑の 9 パッチに関連付けてから、これらの状態の 1 つで drawable.setState() を呼び出します。これは、getState() を介して状態を読み戻すことができるという意味で機能しましたが、境界線の色は変わりませんでした。
  3. 有効 (無効) の検出時にバックグラウンド リソースを直接設定します。これは問題なく動作し、正しい視覚効果が得られますが、少しばかげているように見え、許可される状態は 1 つだけです (たとえば、EditText が押されているかどうか、有効になっているかどうかを手動で確認する必要があります)。

限られたUIの不動産を考えると、テキストの有効性をユーザーに視覚的にフィードバックするために別のUI要素を導入することをためらっています。したがって、EditText自体に表示したいのです。

それで..これは実現可能なものですか?これはかなり一般的な使用例のようですが、私がやろうとしていることを簡単かつエレガントな方法で達成した人はいますか?

4

3 に答える 3

2

説明した手法のいずれかでフォーカスリングの色を変更するのではなく、テキストの色を変更して有効性を示すことをお勧めします(そのうち#3のみが実用的と思われます)。

もう1つの可能性は、コンテンツsetCompoundDrawablesWithIntrinsicBounds()の左側または右側にあるアイコンを変更して、有効性を示すことです。EditText数ヶ月前に誰かとこのテクニックについて話し合ったのを覚えていますが、彼らがそれを機能させたかどうかを忘れています。

そしてもちろん、別のオプションは、カスタム入力フィルターやリスナーなどを介して、無効な入力を許可しないことです。

于 2009-12-27T01:43:02.883 に答える
1

まあ、私は EditText クラスを拡張し、その上に目的の機能を構築します(機能するため、提案している3番目のアプローチを使用します:-))。これを行うには、一度だけ道を歩く必要があり、最善の方法がわかったら、実装を変更することができます(私は3番目のアプローチを使用して個人的に解決したでしょうが、私には問題ないようです)。

于 2009-12-27T00:34:28.250 に答える
0

invalidateDrawable(yourDrawable) への呼び出しは、アプローチ番号 2 で機能すると思います。私は試しませんでしたが、理にかなっています

于 2010-02-21T02:10:19.213 に答える