2016-12-08 2 views
4

enter image description here У меня есть Edittext в моем приложении. Я поставил это по умолчанию черного цвета следующим образом в XML:android: textColor фактически не работает

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, текст будет вставлен в этот другой цвет, а не черный.

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

UPDATE:.

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) { 
      } 
     }); 
+0

Что делать, если 'backgroundColor' делает это? ??? –

+0

Мой цвет фона уже имеет темный серый цвет. Однако, если я вставляю зеленый цвет текста, я получаю зеленый текст в текстовом редакторе. Я не получаю черный (что хочу) или серый, как вы упоминали @SatanPandey a –

+0

Опубликуйте свой файл 'layout'. –

ответ

0

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

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

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

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

+0

Hi. я попытался это: output.setOnFocusChangeListener (новый View.OnFocusChangeListener() { общественного недействительными onFocusChange (View v, логическое HasFocus) { если (HasFocus) { output.setTextColor (Color.BLACK); }} !}); –

+0

Но снова получив тот же зеленый цвет. –

+0

Могут ли выполняться математические операции с содержимым, скопированным? –

0

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

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

Initialize и добавить слушателя к менеджеру:

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, по крайней мере, я ничего не мог найти.

+0

Привет. Извините за задержку в ответе, но извините, это не сработало. Я все еще получаю зеленый цвет после вставки. –

+0

ok еще одна попытка .... попробуйте использовать spannable и установите это в свою строку, прежде чем вставлять – Opiatefuchs

+0

Я не программно выполняю операцию вставки. Я использую android: textIsSelectable = "true" для автоматизации процесса вырезания, копирования, вставки. –

Смежные вопросы