seleccionar - copiar texto gmail android
¿Cómo seleccionar y copiar texto en una vista que no está asociada a una actividad? (1)
Estoy creando una WebView "flotante" como esta:
public class MyService extends Service {
public static WindowManager windowManager;
public static LinearLayout mainView;
public WebView webView;
@Override
public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
// main view
mainView = (LinearLayout) inflater.inflate(R.layout.popup, null);
WindowManager.LayoutParams mainViewParams = new WindowManager.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
windowManager.addView(mainView, mainViewParams);
// main view - web views
webView = (WebView) mainView.findViewById(R.id.webView1);
webView.setWebViewClient(new WebViewClient());
}
}
La vista principal es LinearLayout que contiene un WebView. La vista principal se muestra cuando se crea el servicio y no está asociada a ninguna actividad. La vista puede flotar sobre otras actividades gracias al indicador WindowManager.LayoutParams.TYPE_PHONE
.
El problema es que no puedo seleccionar ningún texto que se muestre en WebView. Si mantengo mi contacto sobre una palabra, la selección aparece y luego desaparece muy rápidamente. La barra de acciones para copiar texto, etc. no aparece, ni el menú contextual está en Marshmallow.
¿Esto está sucediendo porque mi punto de vista no está vinculado a una actividad? Solía implementar mi vista flotante usando una actividad y la selección de texto funcionaba bien, pero recientemente cambié a este enfoque de "no actividad" ya que no quiero tener que lidiar con toda la gestión innecesaria del ciclo de vida de la actividad cuando muestro u oculto el ver.
¿Cómo puedo recuperar la selección de texto (en mi WebView)?
EDITAR : este problema no es específico de WebView. He agregado un EditText en la vista principal, y tampoco puedo seleccionar texto de él .
EDIT 2 : Aquí hay un proyecto de ejemplo que muestra el problema: https://github.com/chinhodado/floating_test . Cuando lo ejecute, verá que es imposible seleccionar y copiar texto de EditText y WebView.
Existe un gran debate sobre si puede crear vistas desde un servicio. El problema es que realmente no puedes tener funcionalidad completa y ese es probablemente el problema al que te enfrentas ahora con el texto que no se puede seleccionar ni copiar. Estoy relativamente seguro de que es porque las devoluciones de llamada no están registradas en una instancia en ejecución de una actividad.
Como se indica en una respuesta en esta pregunta, crear una vista desde un servicio es "contra las pautas de Google"
Cómo mostrar un cuadro de diálogo de un servicio
Aquí las personas están debatiendo sobre él, pero al final ESTO ES REALMENTE CONTRA LAS DIRECTRICES DE GOOGLE. Puedes intentar hacerlo funcionar pero tu aplicación no llegará a Play Store.
¿Comenzar una vista desde un servicio?
Si lees esto también: https://developer.android.com/reference/android/view/View.html
Descubrirá que necesita un "árbol de vistas" que generalmente se adjunta a una actividad para tener funcionalidad
Una vez que haya creado un árbol de vistas, normalmente hay algunos tipos de operaciones comunes que puede desear realizar:
Establecer propiedades : por ejemplo, establecer el texto de un TextView. Las propiedades disponibles y los métodos que las configuran variarán entre las diferentes subclases de vistas. Tenga en cuenta que las propiedades que se conocen en tiempo de compilación se pueden establecer en los archivos de diseño XML.
Establecer foco : el marco manejará el enfoque móvil en respuesta a la entrada del usuario. Para forzar el enfoque a una vista específica, llame a requestFocus ().
Configuración de escuchas : las vistas permiten a los clientes configurar oyentes que serán notificados cuando sucede algo interesante en la vista. Por ejemplo, todas las vistas le permitirán configurar un oyente para recibir notificaciones cuando la vista gane o pierda el foco. Puede registrar dicho oyente utilizando setOnFocusChangeListener (android.view.View.OnFocusChangeListener). Otras subclases de vista ofrecen oyentes más especializados. Por ejemplo, un Botón expone un oyente para notificar a los clientes cuando se hace clic en el botón.
Establecer visibilidad : puede ocultar o mostrar vistas usando setVisibility (int).
Que tengas un buen día.