android:textColor实际上没有工作

时间:2016-12-08 03:18:08

标签: android xml

enter image description here我的应用程序中有一个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) {
            }
        });

2 个答案:

答案 0 :(得分: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下一个button in the keyborad, your EditText`将失去焦点,从而导致更改textColor。这是解决方法,而不是解决方案。

答案 1 :(得分: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;

初始化并向Manager添加一个监听器:

 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上做。这里的问题是,我们在谷歌这里独自留下,没有粘贴监听器或editText的其他解决方案,至少我找不到任何东西。