我的应用程序中有一个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) {
}
});
答案 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的其他解决方案,至少我找不到任何东西。