以下のコードを使用してEditText
の背景色を変更すると、ボックスが縮み、青い下の境界線のICSテーマを維持していませんデフォルトのEditText
に対して存在します。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="#99000000"
>
<EditText
Android:id="@+id/id_nick_name"
Android:layout_marginTop="80dip"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:background="#ffffff"
/>
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="10dip"
Android:layout_marginLeft="20dip"
Android:layout_marginRight="20dip"
Android:orientation="horizontal"
Android:layout_below="@+id/id_nick_name">
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="add"
Android:layout_weight="1"
/>
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="cancel"
Android:layout_weight="1"
/>
</LinearLayout>
</RelativeLayout>
これは次のようなものです。
行うべきことは、edittextの9パッチイメージを作成し、そのイメージを編集テキストの背景として設定することです。 this websiteを使用して9つのパッチを作成できます
参照用にサンプル9のパッチ画像を添付します。edittextの背景として使用すると、アイデアが得られます。画像を右クリックして、「名前を付けて画像を保存」を選択します。画像を保存するときは、拡張子を「9.png」にすることを忘れないでください
遅延コードの1行:
mEditText.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
ここが最良の方法
最初:xml
/res
に新しいdrawable
ファイルを作成し、rounded_edit_text
その後、これを貼り付けます:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" Android:padding="10dp">
<solid Android:color="#F9966B" />
<corners
Android:bottomRightRadius="15dp"
Android:bottomLeftRadius="15dp"
Android:topLeftRadius="15dp"
Android:topRightRadius="15dp" />
</shape>
2番目:res/layoutコピーおよび過去の次のコード(EditText
のコード)
<EditText
Android:id="@+id/txtdoctor"
Android:layout_width="match_parent"
Android:layout_height="30dp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true"
Android:background="@drawable/rounded_edit_text"
Android:ems="10" >
<requestFocus />
</EditText>
Color.xmlファイルを作成し、色の名前を付けます(黒、白...)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="white">#ffffff</color>
<color name="black">#000000</color>
</resources>
また、EditTextで色を設定します
<EditText
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="asdsadasdasd"
Android:textColor="@color/black"
Android:background="@color/white"
/>
または、style.xmlでスタイルを使用します。
<style name="EditTextStyleWhite" parent="Android:style/Widget.EditText">
<item name="Android:textColor">@color/black</item>
<item name="Android:background">@color/white</item>
</style>
ctreatedスタイルをEditTextに追加します。
<EditText
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="asdsadasdasd"
style="@style/EditTextStyleWhite"
/>
私が見つけた最も簡単な解決策は、プログラムで背景色を変更することです。これは、notで、9パッチイメージを処理する必要があります。
((EditText) findViewById(R.id.id_nick_name)).getBackground()
.setColorFilter(Color.<your-desired-color>, PorterDuff.Mode.MULTIPLY);
ソース: 別の回答
使用している色は白です。「#ffffff」は白なので、このリンクから必要になるまで、必要に応じて別の値に変更してみてください Color Codes
これは私の作業ソリューションです
View view = new View(getApplicationContext());
view.setBackgroundResource(R.color.background);
myEditText.setBackground(view.getBackground());
私にとってこのコードは動作するので、このコードをXMLファイルに入れてくださいrounded_edit_text
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" > <item> <shape Android:shape="rectangle"> <stroke Android:width="1dp" Android:color="#3498db" /> <solid Android:color="#00FFFFFF" /> <padding Android:left="5dp" Android:top="5dp" Android:right="5dp" Android:bottom="5dp" > </padding> </shape> </item> </layer-list>
背景色の代わりにスタイルを使用する必要があります。あらゆる場所で検索してみてください。これで問題の解決に役立つと思います
9patchリソースの一部を変更して、edittextのルックアンドフィールをカスタマイズするだけです。
私は2日間の闘争の後、この問題の実用的な解決策を考え出しました。以下の解決策は、編集テキストのみを変更したり、Javaコードを介して色を変更/切り替え、 setColorFilter()メソッドを使用することによるOSバージョンのさまざまな動作の問題を克服します。
import Android.content.Context;
import Android.graphics.PorterDuff;
import Android.graphics.drawable.Drawable;
import Android.support.v4.content.ContextCompat;
import Android.support.v7.widget.AppCompatDrawableManager;
import Android.support.v7.widget.AppCompatEditText;
import Android.util.AttributeSet;
import com.newco.cooltv.R;
public class RqubeErrorEditText extends AppCompatEditText {
private int errorUnderlineColor;
private boolean isErrorStateEnabled;
private boolean mHasReconstructedEditTextBackground;
public RqubeErrorEditText(Context context) {
super(context);
initColors();
}
public RqubeErrorEditText(Context context, AttributeSet attrs) {
super(context, attrs);
initColors();
}
public RqubeErrorEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initColors();
}
private void initColors() {
errorUnderlineColor = R.color.et_error_color_rule;
}
public void setErrorColor() {
ensureBackgroundDrawableStateWorkaround();
getBackground().setColorFilter(AppCompatDrawableManager.getPorterDuffColorFilter(
ContextCompat.getColor(getContext(), errorUnderlineColor), PorterDuff.Mode.SRC_IN));
}
private void ensureBackgroundDrawableStateWorkaround() {
final Drawable bg = getBackground();
if (bg == null) {
return;
}
if (!mHasReconstructedEditTextBackground) {
// This is gross. There is an issue in the platform which affects container Drawables
// where the first drawable retrieved from resources will propogate any changes
// (like color filter) to all instances from the cache. We'll try to workaround it...
final Drawable newBg = bg.getConstantState().newDrawable();
//if (bg instanceof DrawableContainer) {
// // If we have a Drawable container, we can try and set it's constant state via
// // reflection from the new Drawable
// mHasReconstructedEditTextBackground =
// DrawableUtils.setContainerConstantState(
// (DrawableContainer) bg, newBg.getConstantState());
//}
if (!mHasReconstructedEditTextBackground) {
// If we reach here then we just need to set a brand new instance of the Drawable
// as the background. This has the unfortunate side-effect of wiping out any
// user set padding, but I'd hope that use of custom padding on an EditText
// is limited.
setBackgroundDrawable(newBg);
mHasReconstructedEditTextBackground = true;
}
}
}
public boolean isErrorStateEnabled() {
return isErrorStateEnabled;
}
public void setErrorState(boolean isErrorStateEnabled) {
this.isErrorStateEnabled = isErrorStateEnabled;
if (isErrorStateEnabled) {
setErrorColor();
invalidate();
} else {
getBackground().mutate().clearColorFilter();
invalidate();
}
}
}
Xmlでの使用
<com.rqube.ui.widget.RqubeErrorEditText
Android:id="@+id/f_signup_et_referral_code"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentTop="true"
Android:layout_toEndOf="@+id/referral_iv"
Android:layout_toRightOf="@+id/referral_iv"
Android:ems="10"
Android:hint="@string/lbl_referral_code"
Android:imeOptions="actionNext"
Android:inputType="textEmailAddress"
Android:textSize="@dimen/text_size_sp_16"
Android:theme="@style/EditTextStyle"/>
スタイルで線を追加する
<style name="EditTextStyle" parent="Android:Widget.EditText">
<item name="Android:textColor">@color/txt_color_change</item>
<item name="Android:textColorHint">@color/et_default_color_text</item>
<item name="colorControlNormal">@color/et_default_color_rule</item>
<item name="colorControlActivated">@color/et_engagged_color_rule</item>
</style>
色を切り替えるJavaコード
myRqubeEditText.setErrorState(true);
myRqubeEditText.setErrorState(false);