2015-07-16 14 views
9

Ho appena notato che tutti i miei campi EditText nella mia app non mostrano correttamente gli ancoraggi di selezione. Per esempio:Selezione del testo Modifica Ancore mancanti

Image with no selection anchors

Tuttavia, quello che mi aspetto è le ancore corrette per apparire come ad esempio:

Image with selection anchors

Un esempio tipico di una colpiti EditText nella mia app:

<EditText 
    android:id="@+id/text_message" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@id/button_send" 
    android:layout_marginLeft="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:inputType="text|textShortMessage" 
    android:layout_marginRight="4dp" 
    android:hint="@string/hint_chat_send" /> 

Si noti inoltre che la vista "Incolla" al passaggio del mouse ha uno strano bordo bianco attorno ad essa nella mia app, bu t in altre app è completamente trasparente.

Sospetto di qualche tipo di problema del tema, poiché interessa più schermate nella mia app, ma non riesco a trovare informazioni su quali attributi potrebbero causare questo.

UPDATE

Così, ho trascorso un paio modo troppe ore di debug le EditText, TextView, e Editor classi del framework senza alcun risultato. Tutto appare per funzionare come previsto.

ho creato un nuovo vuoto Activity nella stessa applicazione con la seguente disposizione:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <EditText 
     android:layout_width="300dp" 
     android:layout_height="wrap_content" 
     android:hint="test" /> 

</RelativeLayout> 

Nelle mie altre schermate, sto usando la libreria AppCompat ed è connessi temi, ma in questo Activity mi escludeva il tema e l'attività da uno stock di Android Activity con il built-in Materiale tema:

public class TestActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    setTheme(android.R.style.Theme_Material_Light_NoActionBar); 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_test); 
} 
... 

e 'la mia comprensione chiamando setTheme in questo modo dovrebbe ignorare ogni possibile customizatio ns dalla mia app styles.xml. Eppure, vedo questo:

Markers not shown on simulator

Kind of ad una perdita qui ancora ...

+1

Mi sono imbattuto in questo numero poche volte in diverse app e ho confuso che nessuno l'ha mai informato da nessuna parte. Ho provato a riprodurlo ma non sono riuscito. Quindi se troverai qualche tipo di motivo, per favore, fai un bug report. – Nolan

+0

Puoi pubblicare il tuo tema? –

+0

Aggiornato con alcuni dettagli in più, tra cui spogliarello del mio tema corrente ... –

risposta

1

La soluzione è rimuovere android:popupBackground che avevo impostato nel mio tema:

<!-- This will break the text selection popup --> 
<item name="android:popupBackground">@color/not_quite_white</item> 

ho avuto questa serie di prova e tema tutti gli sfondi a discesa Spinner con lo stesso colore. Per qualsiasi motivo, interferisce con il popup di selezione del testo. Inoltre, chiamare Activity.setTheme apparentemente non ha scavalcato questa proprietà, causando una certa confusione.

0

La classe incaricato di elaborare le maniglie è il SelectionModifierCursorController che vive nella classe Editor. Perché non visualizzi i cursori (cursore di selezione sinistro e destro) deve essere stato chiamato hide sull'istanza. Questo viene fatto ad esempio quando cambia la modalità touch per la vista.

http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/widget/Editor.java#3976

O se le TextViews (EditTexts sono fondamentalmente in testo visualizzazioni) textCanBeSelected restituisce false: http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/widget/Editor.java#479

o un paio di altre situazioni, ma cominciamo qui per le indagini.

Per assicurarsi che nulla sia disattivato con la modalità touch, è possibile chiamare isInTouchMode su un EditText in cui funziona e uno in cui non lo è?

Per assicurarsi che textCanBeSelected sia corretto, è possibile chiamare tale metodo su un EditText in cui funziona e uno dove non lo fa.

Se tutto va bene con entrambi questi dovremo continuare a scavare;)

+0

Grazie per l'attenzione. Vedi i miei aggiornamenti, ma in fondoInTouchMode restituiva true e nessuna quantità di setTextSelectable ha avuto alcun effetto ... –

+0

Questo è un peccato, hai lo stesso comportamento su più versioni di Android, in primo luogo, Lollipop -> Kitkat? – JohanShogun

+0

Ho finalmente trovato la soluzione. Era un attributo canaglia ambientato in uno dei miei temi. Mi è venuta l'idea indirettamente di guardare la fonte che hai collegato, quindi ti ho assegnato la taglia. –

Problemi correlati