2010-08-10 3 views
9

Я не уверен, что это возможно, может быть, кто-то может установить меня прямо. У меня есть EditText View в приложении Android, который имеет белый текст на синем фоне. Когда текст выбран (через длинное нажатие и диалог редактирования), я хочу, чтобы подсветка была белой и изменила цвет текста на черный. Раздражающе, хотя, похоже, не существует способа установить цвет текста при подсветке. Вы можете установить цвет подсветки, используя textColorHighlight, но не цвет текста, поэтому установка белого выделения с белым текстом приводит к большому белому блоку.Изменить цвет выделенного текста на Android

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

Проверка других стандартных приложений кажется, что цвет текста никогда не меняется, поэтому я думаю, что это непросто сделать. Я бы предпочел не подклассифицировать EditText, если вообще возможно, просто так просто. Я что-то упускаю? Можно ли это сделать в представлении xml?

ответ

1

Вы попробовали @android:attr/textColorPrimaryInverse?

+0

Я пробовал все и стиль стиль = "@ стиль/myDisplayAppearance" где все выше были указаны в качестве элементов. К сожалению, не повезло ни с одним из них. – sgargan

+0

Как я уже сказал, вы пробовали андроид: textColor = "? Android: attr/textColorPrimaryInverse"? – fedj

+0

Да, я пробовал выше, он просто меняет цвет текста по умолчанию на textColorPrimaryInverse, который в моем случае черный. Я действительно пытаюсь сделать его белым по умолчанию и черным только при подсветке. Когда применяются когда-либо обратные цвета? спасибо за помощь кстати. – sgargan

1

Как указано на this SO поста, вы должны использовать селектор, чтобы изменить цвет текста следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Pressed State --> 
    <item android:state_pressed="true" 
     android:color="#FFFFFF" /> 

    <!-- Focused State --> 
    <item android:state_focused="true" 
     android:color="#FFFFFF" /> 

    <!-- Default State --> 
    <item android:color="#000000" /> 
</selector> 

А затем установите TextColor свойство @ вытяжке/selector_name

0
Object mSelectionForegroundColorSpan; 
@Override 
protected void onSelectionChanged(int selStart, int selEnd) { 
    super.onSelectionChanged(selStart, selEnd); 
    if(mSelectionForegroundColorSpan == null){ 
     mSelectionForegroundColorSpan = new ForegroundColorSpan(Color.GREEN); 
    }else{ 
     getText().removeSpan(mSelectionForegroundColorSpan); 
    } 
    if(selStart > selEnd){ 
     int swap = selStart; 
     selStart = selEnd; 
     selEnd = swap; 
    } 
    getText().setSpan(mSelectionForegroundColorSpan, selStart, selEnd, Spanned.SPAN_INTERMEDIATE); 
} 

Переопределение onSelectionChanged метод TextView, получить текст и установить ForegroundColorSpan

enter image description here

1

Try: <item name="android:textColorHighlight">your_color</item>

в стиле, который вы в качестве темы. .

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
    <item name="colorPrimary">your_color1</item> 
    <item name="colorPrimaryDark">your_color2</item> 
    <item name="colorAccent">your_color3</item> 
    <item name="android:textColor">your_color4/item> 
    <item name="android:textColorHighlight">your_color</item> 
</style> 

затем используйте этот стиль в качестве темы для своей деятельности в файле манифеста. Для eg-

<activity 
    android:name=".youractivity" 
    android:label="" 
    android:theme="@style/AppTheme.NoActionBar"  
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 
Смежные вопросы