10

Czy istnieje sposób, aby programowo uruchomić pasek działań kontekstowych związanych z widokiem tekstowym, klikając przycisk? Powinien także zawierać domyślne opcje kopiowania/zaznaczania wszystkich. Zasadniczo chcę pokazać uchwyty wyboru w moim widoku tekstowym i domyślnej kopii androida/wybierz wszystkie opcje na pasku akcji, na kliknięciu przycisku (zamiast długiego kliknięcia/dwukrotnego dotknięcia).jak uruchomić pasek czynności kontekstowych dla widoku tekstowego programowo z domyślnymi opcjami skopiować i wybrać wszystko?

Co próbowałem do tej pory: próbował użyć apletu setCustomActionModeCallback(), ale tutaj problem polega na długim naciśnięciu/dwukrotnym kliknięciu widoku tekstowego, aby pojawił się CAB. Próbowałem użyć api startActionMode(), ale nie mogłem znaleźć sposobu na zachowanie domyślnych pozycji. Po prostu otwiera się nowy pusty CAB .. Wiem, mogę dodać moją niestandardową kopię - wybierz cały kod i użyj tego pustego CAB-a, ale chcę użyć domyślnego androida, zamiast go zarządzać samodzielnie.

Edytuj; Nie mogę używać EditText. Widok musi być tylko TextView i długie kliknięcie zostanie wyłączone. Robię wszystkie powyższe zmiany ustawiając TextView jak wybierane

+0

chcesz to w TextView lub EditText. –

+0

Po ustawieniu tekstu jako dostępnego, długie kliknięcie zostanie włączone niejawnie. – Simas

Odpowiedz

2

Wybierz swój tekst ręcznie, a następnie wykonać długie kliknięcie:

textView.post(new Runnable() { 
    @Override 
    public void run() { 
     Selection.selectAll((Spannable) tv.getText()); 
     tv.performLongClick(); 
    } 
}); 

Edit:

Problemem jest to, że wbudowane w wybór tekstu CAB jest prywatny i używa wielu prywatnych klas. Aby go użyć, trzeba skopiować dużo kodu lub uzyskać dostęp do wielu metod.

Możesz utworzyć własne menu CAB, ale potrzebujesz też uchwytów kontrolera, które znowu zawierają dużo kodu.

Prostym rozwiązaniem byłoby żyć z tym, co masz i użyć mojej sugerowanej powyżej metody. Jeśli chcesz uniknąć nazywając swoje długie kliknięcie słuchacza można go usunąć podczas rozmowy z kabiny:

Selection.selectAll((Spannable) tv.getText()); 
tv.setOnLongClickListener(null); 
tv.performLongClick(); 
tv.setOnLongClickListener(mLongClickListener); 
+0

Jak już powiedziałem, nie będę mógł używać długiego kliknięcia, ponieważ jest on nadpisywany i służy do wyświetlania menu. – afadfadf

+0

@noone zaktualizował moją odpowiedź, aby podać nieco więcej szczegółów na temat tego, co tu się dzieje. Również rozwiązanie istniejącego OnLongClickListener. – Simas

+0

To nie pasuje do mojego przypadku użycia, ale myślę, że jest to jedyny sposób, by zrobić to samemu, niż pisać i zarządzać cyklem życia kabiny. Stąd oznaczenie jako poprawna odpowiedź- – afadfadf

1

jeśli chcesz zaznaczyć tekst w tekst Widok niż istnieje kilka metod, które można wykonać. Pierwszą rzeczą, którą możesz zrobić, jest ustawienie właściwości XML TextView.

android:textIsSelectable = "true" 

txtView.setTextIsSelectable(true) 

Flaga textIsSelectable pozwala użytkownikom na wykonywanie gestów wyboru w TextView, co z kolei wywołuje wbudowane kontrole kopiuj/wklej systemu.

lub

android:selectAllOnFocus = true; 
setSelectAllOnFocus(boolean) 

Jeśli tekst jest wybierana, wybierz je wszystkie, gdy widok odbywa się skupić. i możesz ustawić fokus na kliknięciu swojego przycisku. za pomocą metody RequestFocus().

Aby uzyskać więcej szczegółowych informacji, możesz odwołać się do tego linku. znajdziesz wszystkie wymagane zadania. http://developer.android.com/reference/android/widget/TextView.html[http://developer.android.com/reference/android/widget/TextView.html][1]

dziękuję

+0

Przykro mi, że nie dostałem odpowiedzi. :) – afadfadf

+0

Powyższa odpowiedź pomoże ci wybrać lub skopiować tekst z edittext –

+0

Proszę przeczytać pytanie. Jego TextView, a nie edittext i mój przypadek użycia wyraźnie wspomniałem, który nie jest adresowany do ciebie – afadfadf

Powiązane problemy