Android: textColor фактически не работает

Введите описание изображения здесь У меня есть Edittext в моем приложении. Я установил цвет по умолчанию черным следующим образом в XML:

android:textColor="@android:color/black" 

ВНЕШНИЙ ВИД:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="wrap_content" tools:context="scientificcalculatorapp.scientificcalculator.ScientificCalculator" android:weightSum="1" android:orientation="vertical" android:layout_alignParentBottom="true"> <LinearLayout android:layout_width="0dp" android:layout_height="0dp" android:background="@android:color/transparent" android:focusable="true" android:focusableInTouchMode="true"> </LinearLayout> <EditText android:layout_width="match_parent" android:layout_height="48dp" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/Output" android:enabled="true" android:focusable="true" android:longClickable="true" android:inputType="text" android:textIsSelectable="true" android:cursorVisible="true" android:textColor="@android:color/black" android:bufferType="spannable" android:background="@android:color/darker_gray" android:allowUndo="true" /> </LinearLayout> 

Это работает, когда я получаю ввод с клавиатуры, но когда я копирую что-то в другом цвете из другого приложения, а затем вставляю его в этот EditText, текст вставляется в этот другой цвет, а не черный.

Как я могу стандартизировать цвет, чтобы быть черным, независимо от того, какой цвет я его скопировал.

ОБНОВИТЬ:

 output.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { String yourCopiedString=output.getText().toString(); int length = yourCopiedString.length(); Spannable spannable= new SpannableString(yourCopiedString); //set color //set size spannable.setSpan(new ForegroundColorSpan(Color.BLACK), 0,length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); spannable.setSpan(new RelativeSizeSpan(5.0f), 0,length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); output.setText(spannable); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } }); 

В зависимости от функциональности, которую они добавили, поведение от копирования зависит от поставщика и поставщика.

Мое предложение, установите onFocusChangeListener в ваш editText , когда EditText теряет фокус, снова переопределите textColor ! Это простая работа. Попробуйте и дайте мне знать.

Обновить:
Поскольку у вас есть только одно поле EditText , оно никогда не теряет фокус, и вышеупомянутое решение должно быть немного изменено.

В макете добавьте другое поле EditText . Установите его видимость в GONE . Для существующего поля EditText добавьте android:imeOptions="actionNext" .
В вашей деятельности, в новое добавленное field, set it's input type to EditText field, set it's input type to TYPE_NULL . Now, when the user presses . Now, when the user presses следующую button in the keyborad, your EditText` потеряет фокус, в результате чего будет button in the keyborad, your textColor. Это работа, а не решение.

Хорошо, вот попытка. Я не знаю, решает ли это проблему, но нужно показать код. Сначала создайте стиль:

 <style name="NormalText" parent="@android:style/TextAppearance"> <item name="android:textColor">@android:color/black</item> <item name="android:textSize">15sp</item> </style> 

Затем добавьте TextWatcher в свой EditText

 output.addTextChangedListener(new TextWatcher(){ @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { } } 

Создать глобальное логическое значение и ClipboardManager:

  private ClipboardManager clipBoard; private boolean addedToClipboard = false; 

Инициализировать и добавить слушателя в Менеджер:

  clipBoard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); clipBoard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() { @Override public void onPrimaryClipChanged() { addedToClipboard = true; } }); 

Затем выполните следующие действия в AfterTextChanged:

  @Override public void afterTextChanged(Editable s) { Log.d("TAPPJABB", "AFTER TEXT CHANGED:" + s); if (addedToClipboard == true) { String yourCopiedString = output.getText().toString(); int length = yourCopiedString.length(); Spannable spannable = new SpannableString(yourCopiedString);//set color spannable.setSpan(new ForegroundColorSpan(Color.BLACK), 0, length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); spannable.setSpan(new RelativeSizeSpan(5.0f), 0, length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); addedToClipboard = false; output.setText(spannable); } } 

Важно соблюдать порядок здесь, чтобы избежать бесконечного цикла. Логическое значение предотвращает форматирование нормального ввода, в этом примере оно работает только для вставки буфера обмена.

Но, как вы упомянули, это не работает, если вы хотите вставлять его несколько раз, что обычно никто не делает на одном EditText. Проблема здесь в том, что мы остаемся здесь один от Google, нет никакого приемника папок или другого решения для editText, по крайней мере, я ничего не мог найти.

Intereting Posts
Android Studio: не удалось найти com.android.tools.build:gradle:2.0.0-alpha2 NotificationCompat.BigTextStyle Содержимое исчезает при новом уведомлении Как использовать выходной параметр в Java? Нажатие на уведомление не открывает указанную деятельность Показанный первый фрагмент ViewPager всегда неверен с FragmentStatePager Android – <include layout = … /> возвращает ошибку Примените смещение к элементам GridLayout и сохраните равный размер среди всех элементов 9-Patch доступных размеров Android. Как различные плотности обрабатывают не растянутые области? Картина с помощью libgdx делает мигающие объекты USB-хост для Android Обнаружение столкновения с помощью Android 2d Android-камера: onActivityResult () намерение имеет значение null, если у него есть дополнительные функции Растровое изображение Без памяти Как осуществлять поиск и подключение к определенной сети Wi-Fi в Android программно Как очистить или очистить память кучи динамически в моем коде