私がやりたいのは、setError()
メソッドを使用した後に表示されるポップアップエラーメッセージの背景色を変更することです(カスタム描画可能に設定)。
現在、次のようになっています。
Androidには2つのファイルがあります:
popup_inline_error.9.png
popup_inline_above_error.9.png
そして、あなたは2つの属性を使用してそれらを設定できるはずです:
errorMessageBackground
errorMessageAboveBackground
しかし、テーマにそれらを設定しようとすると、私が得るすべては次のとおりです。
<item name="errorMessageBackground">@drawable/popup_inline_error_holo_light</item>
<item name="errorMessageAboveBackground">@drawable/popup_inline_error_above_holo_light</item>
error: Error: No resource found that matches the given name: attr 'errorMessageBackground'.
(それは同じだ with Android:errorMessageBackground
)
私はこの質問をここに入れていますが、アイデアが不足しているので、誰かがすでにそれをやっていることでしょうか?
EDIT:使用しているテーマのヘッダー:
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style
name="Theme.MyThemeName"
parent="@style/Theme.Sherlock.Light">
別の編集:ええと、私の質問は次の複製であることがわかりました: Android:errorMessageBackgroundはスタイルでリソースが見つかりませんエラーを取得します。 xml
まだ別の編集:これは既知の問題です。このリンクをご覧ください: https://code.google.com/p/Android/issues/detail?id = 55879
@ Codeversed solution を使用することをお勧めしますが、何らかの理由で適切でない場合は、カスタムEditText
実装を使用できます。
簡単に言うと、エラー表示用のカスタムxml状態を作成しました。以下の関連コードを参照してください。
InputEditText.Java:
import Android.annotation.TargetApi;
import Android.content.Context;
import Android.graphics.drawable.Drawable;
import Android.os.Build;
import Android.text.Editable;
import Android.text.TextWatcher;
import Android.util.AttributeSet;
import Android.widget.EditText;
import com.example.oleksandr.inputedittext.R;
/**
* Input EditText which allows define custom drawable for error state
*/
public class InputEditText extends EditText {
private static final int[] STATE_ERROR = {R.attr.state_error};
private boolean mIsError = false;
public InputEditText(Context context) {
this(context, null, 0);
init();
}
public InputEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public InputEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@TargetApi(Build.VERSION_CODES.Lollipop)
public InputEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init() {
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// empty
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
setError(null);
}
@Override
public void afterTextChanged(Editable s) {
// empty
}
});
}
@Override
public void setError(CharSequence error) {
mIsError = error != null;
super.setError(error);
refreshDrawableState();
}
@Override
public void setError(CharSequence error, Drawable icon) {
mIsError = error != null;
super.setError(error, icon);
refreshDrawableState();
}
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (mIsError) {
mergeDrawableStates(drawableState, STATE_ERROR);
}
return drawableState;
}
}
drawable/edittext_bg_error.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
Android:id="@+id/listview_background_shape"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
>
<stroke
Android:width="2dp"
Android:color="#f00"
/>
<padding
Android:bottom="2dp"
Android:left="2dp"
Android:right="2dp"
Android:top="2dp"
/>
<corners Android:radius="5dp"/>
<solid Android:color="#ffffffff"/>
</shape>
drawable/edittext_bg_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<!-- custom error state drawable -->
<item Android:drawable="@drawable/edittext_bg_error" app:state_error="true"/>
<!-- Do whatever you want for all other states -->
<item Android:drawable="@Android:drawable/editbox_background_normal"/>
</selector>
attrs.xmlに追加します
<attr name="errorColor" format="reference"/>
およびtostyleables.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="error">
<attr name="state_error" format="boolean"/>
</declare-styleable>
</resources>
使い方は本当に簡単です:
<com.example.oleksandr.inputedittext.views.InputEditText
Android:id="@id/edittext"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/edittext_bg_selector"
Android:inputType="text"
Android:text="@string/hello_world"
/>
[編集]:
元の答えはエラーポップアップの色の変更に関するものであり、EditTextの背景色ではないことに気づきました。とにかく、これが誰かを助けることを願っています。
次の依存関係を含める必要があります。
compile 'com.Android.support:appcompat-v7:23.1.1'
compile 'com.Android.support:design:23.1.1'
そして、それを使用する方法のサンプルは次のとおりです。
<Android.support.design.widget.TextInputLayout
Android:id="@+id/input_layout_password"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<EditText
Android:id="@+id/input_password"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="@string/hint_email" />
</Android.support.design.widget.TextInputLayout>
これにより、フォーム検証とラベルのニースアニメーション効果を提供するために探しているマテリアルデザインが得られます。