java - অ্যাংক্রপ্যাট v7 এর সাথে EditText নীচে লাইন রঙ পরিবর্তন করা হচ্ছে




android android-layout (16)

আমি অ্যান্ড্রয়েড 5 এবং কমতে সামঞ্জস্যপূর্ণ চেহারা পেতে অ্যাপcompat v7 ব্যবহার করছি। এটা বরং ভাল কাজ করে। তবে আমি EditTexts এর জন্য নীচের লাইনের রঙ এবং অ্যাক্সেন্ট রঙটি কিভাবে পরিবর্তন করতে পারি তা আমি বুঝতে পারছি না। এটা কি সম্ভব?

আমি একটি কাস্টম android:editTextStyle সংজ্ঞায়িত করার চেষ্টা করেছি android:editTextStyle (cf. নিচের) কিন্তু আমি কেবল পুরো পটভূমি রঙ বা পাঠ্য রঙ পরিবর্তন করতে সক্ষম হয়েছিলাম কিন্তু নিচের লাইনটি না অ্যাকসেন্ট রঙটি। ব্যবহার করার জন্য একটি নির্দিষ্ট সম্পত্তি মান আছে কি? আমি কি android:background মাধ্যমে একটি কাস্টম ড্রয়েবল ইমেজ ব্যবহার করতে পারি android:background সম্পত্তি? হেক্সা মধ্যে একটি রং উল্লেখ করা সম্ভব নয়?

 <style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
     <item name="android:editTextStyle">@style/Widget.App.EditText</item>
 </style>

 <style name="Widget.App.EditText" parent="Widget.AppCompat.EditText">
     ???
 </style>

অ্যান্ড্রয়েড এপিআই ২1 সূত্র অনুসারে, উপাদান নকশা সহ colorControlActivated colorControlNormal colorControlActivated এবং colorControlNormal colorControlActivated colorControlNormal colorControlActivated ব্যবহার করে বলে মনে হচ্ছে। অতএব, আমি পূর্ববর্তী শৈলী সংজ্ঞাতে এই বৈশিষ্ট্যগুলিকে ওভাররাইড করার চেষ্টা করেছি কিন্তু এর কোনো প্রভাব নেই। সম্ভবত appcompat এটি ব্যবহার করে না। দুর্ভাগ্যবশত, আমি উপাদান নকশা সঙ্গে appcompat শেষ সংস্করণ জন্য উত্স খুঁজে পাচ্ছি না।


Activit.XML কোড যোগ করুন

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/editText"
        android:hint="Informe o usuário"
        android:backgroundTint="@android:color/transparent"/>

কোথায় আপনার পছন্দসই রং জন্য BackgroundTint=color রঙ


অবশেষে, আমি একটি সমাধান খুঁজে পেয়েছি। এটি কেবল আপনার অ্যাপ্লিকেশান থিম সংজ্ঞাতে colorControlNormal colorControlHighlight colorControlActivated , colorControlHighlight এবং colorControlNormal colorControlActivated মানকে ওভাররাইড করে থাকে এবং আপনার সম্পাদক শৈলী নয়। তারপরে, আপনি যে কোনও ক্রিয়াকলাপের জন্য এই থিমটি ব্যবহার করতে ভাবুন। নীচে একটি উদাহরণ:

<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">@color/accent</item>
    <item name="colorControlHighlight">@color/accent</item>
</style>

আপনার সমস্যাটির জন্য একটি দ্রুত সমাধান আপনার অ্যাপস স্পেসেজ / বিল্ড / ইন্টারমিডিয়েট / বিস্ফোরণ-aar / com.android.support / appcompat-v7 / res / drawable / abc_edit_text_material.xml এ দেখতে এবং আপনার ড্রয়বহুল ফোল্ডারে XML ফাইলটি অনুলিপি করতে হয়। আপনার পছন্দের সাথে মেলানোর জন্য আপনি এই পছন্দের অংশ থেকে 9 প্যাচ ফাইলের রং পরিবর্তন করতে পারেন।


আপনি এটিকে সম্পাদন করতে বাম, ডান এবং উপরের দিকে বিয়োগ প্যাডিং সহ আয়তক্ষেত্রের পটভূমি সেট করতে পারেন। এখানে এক্সএমএল উদাহরণ:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-1dp"
        android:left="-1dp"
        android:right="-1dp"
        android:bottom="1dp"
        >
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#6A9A3A"/>
        </shape>
    </item>
</layer-list>

যদি আপনি ফোকাস edittext জন্য বিভিন্ন প্রস্থ এবং রঙ প্রদান করতে চান তাহলে একটি নির্বাচক সঙ্গে আকৃতি প্রতিস্থাপন করুন।


আপনি যদি অ্যাপ্লিকেশন রঙগুলি ব্যবহার না করে নীচে লাইন পরিবর্তন করতে চান তবে আপনার থিমগুলিতে এই লাইনগুলি ব্যবহার করুন:

<item name="android:editTextStyle">@android:style/Widget.EditText</item>
<item name="editTextStyle">@android:style/Widget.EditText</item>

আমি অন্য সমাধান জানি না।


আমার জন্য আমি AppTheme এবং একটি মান colors.xml উভয়ই পরিবর্তন করেছি রঙ কন্ট্রোলার Normal এবং colorAccent উভয় আমাকে EditText সীমানা রঙ পরিবর্তন করতে সাহায্য করেছে। পাশাপাশি কার্সার এবং "|" যখন একটি EditText ভিতরে।

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorControlNormal">@color/yellow</item>
    <item name="colorAccent">@color/yellow</item>
</style>

এখানে রং.এক্সএমএল

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="yellow">#B7EC2A</color>
</resources>

আমি অ্যান্ড্রয়েডটি বের করে দিয়েছিলাম: টেক্সট ক্রসারড্রোভেবেল এট্রিবিউট @null যা আমি editText শৈলী ভিতরে রাখি। আমি এই ব্যবহার করার চেষ্টা করলে, রং পরিবর্তন হবে না।


আমি খুব দীর্ঘ জন্য এই সমস্যা আটকে ছিল।

আমি একটি সমাধান প্রয়োজন যে v21 উপরের এবং নীচের উভয় সংস্করণ জন্য কাজ।

অবশেষে আমি খুব সহজ কিন্তু কার্যকরী সমাধান খুব সহজেই খুঁজে পেলাম: সম্পাদনা পটভূমির রঙটিকে স্বতঃস্ফূর্তভাবে EditText বৈশিষ্ট্যে সেট করুন।

<EditText
    android:background="@android:color/transparent"/>

আমি এই কেউ কিছু সময় বাঁচাতে আশা করি।


আমি পোর্টারডাফের সাথে লাইনের রঙ পরিবর্তন করার জন্য এই পদ্ধতিটি ব্যবহার করি না, অন্য কোনও দ্রষ্টব্য।

public void changeBottomColorSearchView(int color) {
    int searchPlateId = mSearchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);
    View searchPlate = mSearchView.findViewById(searchPlateId);
    searchPlate.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}

এখানে সহায়তা ডিজাইন লাইব্রেরীতে TextInputLayout উত্স কোডের একটি অংশ ( সংস্করণ 23.2.0 এর জন্য আপডেট করা হয়েছে ), যা একটি সহজ উপায়ে EditText এর নিম্ন লাইনের রঙ পরিবর্তন করে:

private void updateEditTextBackground() {
    ensureBackgroundDrawableStateWorkaround();

    final Drawable editTextBackground = mEditText.getBackground();
    if (editTextBackground == null) {
        return;
    }

    if (mErrorShown && mErrorView != null) {
        // Set a color filter of the error color
        editTextBackground.setColorFilter(
                AppCompatDrawableManager.getPorterDuffColorFilter(
                        mErrorView.getCurrentTextColor(), PorterDuff.Mode.SRC_IN));
    }
    ...
}

মনে হচ্ছে উপরের প্রোগ্রামটি এখন 23.2.0 তে নিরর্থক হয়ে গেলে আপনি প্রোগ্রামটি রঙ পরিবর্তন করতে চান।

এবং যদি আপনি সমস্ত প্ল্যাটফর্মকে সমর্থন করতে চান তবে এখানে আমার পদ্ধতি:

/**
 * Set backgroundTint to {@link View} across all targeting platform level.
 * @param view the {@link View} to tint.
 * @param color color used to tint.
 */
public static void tintView(View view, int color) {
    final Drawable d = view.getBackground();
    final Drawable nd = d.getConstantState().newDrawable();
    nd.setColorFilter(AppCompatDrawableManager.getPorterDuffColorFilter(
            color, PorterDuff.Mode.SRC_IN));
    view.setBackground(nd);
}

এটি খুব সহজেই android:backgroundTint আপনার EditTextandroid:backgroundTint বৈশিষ্ট্যাবলী।

android:backgroundTint="@color/blue"
android:backgroundTint="#ffffff"
android:backgroundTint="@color/red"


 <EditText
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:backgroundTint="#ffffff"/>

কেউ যদি শুধু একটি একক সম্পাদন পরিবর্তন করতে চায় তবে আমার এই উত্তরটির মত লাগছিল। আমি এটা পছন্দ করি:

editText.getBackground().mutate().setColorFilter(getResources().getColor(R.color.your_color), PorterDuff.Mode.SRC_ATOP);

গৃহীত উত্তরটি স্টাইলের ভিত্তিতে জিনিসটির জন্য একটু বেশি, তবে আপনার সবচেয়ে কার্যকরী জিনিসটি আপনার AppTheme শৈলীতে রঙ অ্যাক্সেন্ট বৈশিষ্ট্য যোগ করার মতো:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:editTextStyle">@style/EditTextStyle</item>
</style>

<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>

ColorAccent বৈশিষ্ট্যটি অ্যাপ্লিকেশান জুড়ে উইজেট টিনের জন্য ব্যবহার করা হয় এবং এইভাবে সামঞ্জস্যের জন্য ব্যবহার করা উচিত


দুই দিনের সংগ্রামের পর আমি এই সমস্যার সমাধান সমাধান করেছি, নিচের সমাধানগুলি তাদের জন্য উপযুক্ত, যারা কেবলমাত্র কয়েকটি সম্পাদনা পাঠ্য পরিবর্তন করতে চান, জাভা কোডের মাধ্যমে পরিবর্তন / টগল রঙ করতে চান এবং OS সংস্করণগুলিতে বিভিন্ন আচরণের সমস্যাগুলি অতিক্রম করতে চান setColorFilter () পদ্ধতি ব্যবহার করার কারণে।

    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();
    }
  }
}

এক্সএমএল ব্যবহার করে

<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>

জাভা কোড রঙ টগল

myRqubeEditText.setErrorState(true);
myRqubeEditText.setErrorState(false);

ব্যবহার করুন:

<EditText
    app:backgroundTint="@color/blue"/>

এটি পূর্ব-ললিপপ ডিভাইসগুলিকে সমর্থন করবে না শুধুমাত্র +21


লরেনটস সমাধানটি সঠিক, তবে মন্তব্যগুলির মধ্যে বর্ণিত কিছু ত্রুটিগুলির সাথে এটি আসে, যেহেতু সম্পাদনাটি কেবলমাত্র নীচের CheckBoxes তবে Toolbar , CheckBoxes ইত্যাদির ব্যাক CheckBoxes

সৌভাগ্যক্রমে v22.1 appcompat-v7 এর appcompat-v7 কিছু নতুন সম্ভাবনার সূচনা করে। এখন এক দৃশ্যের জন্য একটি নির্দিষ্ট থিম বরাদ্দ করা সম্ভব। সরাসরি Changelog থেকে:

অ্যাপ্লিকেশন অব্যবহৃত ব্যবহার: স্টাইলিং টুলবার জন্য থিম। আপনি এখন অ্যান্ড্রয়েড ব্যবহার করতে পারেন : API এ লেভেল 7 এবং উচ্চতর ডিভাইসগুলিতে এবং Android এর টুলবারগুলির জন্য থিম : API স্তরের 11 এবং উচ্চতর ডিভাইসগুলিতে সমস্ত উইজেটগুলির জন্য থিম সাপোর্ট।

তাই গ্লোবাল থিমের পছন্দসই রঙ নির্ধারণ করার পরিবর্তে, আমরা একটি নতুন তৈরি করি এবং এটিকে শুধুমাত্র EditTextEditText

উদাহরণ:

<style name="MyEditTextTheme">
    <!-- Used for the bottom line when not selected / focused -->
    <item name="colorControlNormal">#9e9e9e</item>
    <!-- colorControlActivated & colorControlHighlight use the colorAccent color by default -->
</style>
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/MyEditTextTheme"/>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="colorControlNormal">@color/colorAccent</item>
    <item name="colorControlActivated">@color/colorAccent</item>
    <item name="colorControlHighlight">@color/colorAccent</item>

</style>







android-styles