Wie kann Text in einer Ansicht ausgewählt und kopiert werden, die keiner Aktivität zugeordnet ist?

10

Ich erstelle ein "floating" WebView wie folgt:

%Vor%

Die Hauptansicht ist ein LinearLayout, das ein WebView enthält. Die Hauptansicht wird angezeigt, wenn der Service erstellt wird und zu keiner Aktivität angefügt ist. Die Ansicht kann dank der WindowManager.LayoutParams.TYPE_PHONE -Flagge über anderen Aktivitäten schweben.

Das Problem ist, ich kann keinen im WebView angezeigten Text auswählen. Wenn ich meine Berührung auf ein Wort halte, erscheint die Auswahl und verschwindet dann sehr schnell. Die Aktionsleiste zum Kopieren von Text usw. wird nicht angezeigt, auch nicht das Kontextmenü in Marshmallow.

Findet dies statt, weil meine Sicht nicht an eine Aktivität gebunden ist? Früher habe ich meine Floating-Ansicht mit einer Aktivitäts- und Textauswahl implementiert, aber ich habe kürzlich diesen Ansatz "keine Aktivität" gewählt, da ich mich nicht mit dem unnötigen Aktivitäts-Lebenszyklus-Management befassen muss, wenn ich das ein- / ausblenden sehen.

Wie kann ich die Textauswahl (in meiner WebView) wiederherstellen?

BEARBEITEN : Dieses Problem ist nicht WebView-spezifisch. Ich habe einen EditText in die Hauptansicht eingefügt und kann auch keinen Text daraus auswählen .

EDIT 2 : Hier ist ein Beispielprojekt, das das Problem zeigt: Ссылка . Wenn Sie es ausführen, werden Sie sehen, dass es unmöglich ist, Text aus EditText und WebView auszuwählen und zu kopieren.

    
Chin 07.12.2015, 03:57
quelle

1 Antwort

0

Es gibt viele Diskussionen über die Frage, ob Sie Ansichten von einem Service erstellen können. Das Problem ist, dass Sie nicht wirklich volle Funktionalität haben können und das ist wahrscheinlich das Problem, mit dem Sie gerade konfrontiert werden, wobei Text nicht auswählbar oder kopierbar ist. Ich bin relativ sicher, weil Callbacks nicht für eine laufende Instanz einer Aktivität registriert sind.

Wie in einer Antwort in dieser Frage angegeben, ist das Erstellen einer Ansicht aus einem Service "gegen Google-Richtlinien"

So zeigen Sie einen Dialog von einem Service aus

Hier diskutieren die Leute darüber, aber am Ende ist das tatsächlich gegen GOOGLE LEITLINIEN. Du kannst es versuchen und es funktionieren lassen, aber deine App wird es nicht in den Play Store schaffen.

Starten einer Ansicht von einem Service?

Wenn Sie das auch lesen: Ссылка

Sie werden feststellen, dass Sie einen "Baum der Ansichten" benötigen, der normalerweise an eine Aktivität angehängt ist, um Funktionalität zu haben

Nachdem Sie eine Baumstruktur mit Ansichten erstellt haben, gibt es in der Regel einige Arten allgemeiner Operationen, die Sie ausführen möchten:

Eigenschaften festlegen : Zum Beispiel den Text einer TextView festlegen. Die verfügbaren Eigenschaften und die Methoden, die sie festlegen, variieren zwischen den verschiedenen Unterklassen der Ansichten. Beachten Sie, dass Eigenschaften, die zum Zeitpunkt der Erstellung bekannt sind, in den XML-Layoutdateien festgelegt werden können.

Fokus festlegen : Das Framework behandelt den Fokus als Reaktion auf Benutzereingaben. Um den Fokus auf eine bestimmte Ansicht zu erzwingen, rufen Sie requestFocus () auf.

Listener einrichten : Mit Views können Clients Listener einrichten, die benachrichtigt werden, wenn der Ansicht etwas Interessantes passiert. In allen Ansichten können Sie beispielsweise festlegen, dass ein Listener benachrichtigt wird, wenn die Ansicht den Fokus erhält oder verliert. Sie können einen solchen Listener mit setOnFocusChangeListener (android.view.View.OnFocusChangeListener) registrieren. Andere Sichtunterklassen bieten speziellere Listener. Ein Button stellt beispielsweise einen Listener für die Benachrichtigung von Clients bereit, wenn auf die Schaltfläche geklickt wird.

Sichtbarkeit festlegen : Sie können Ansichten mithilfe von setVisibility (int) ausblenden oder anzeigen.

Einen schönen Tag noch.

    
Arnold Balliu 04.01.2016 22:19
quelle