vistas tiempo studio otro linearlayout incluir gridlayout formulario ejecucion dinamico desde crear controles agregar java android android-4.2-jelly-bean android-launcher

java - tiempo - Cómo agregar una vista personalizada en JellyBean Launcher de Android



linearlayout en android studio (4)

Buenas noticias, noticias no tan buenas, malas noticias.

Bien nuevo primero .
Es posible hacer lo que quieras.

Ahora las noticias no tan buenas.
Deberá escribir desde cero la aplicación iniciadora (también conocida como pantalla de inicio). Sí, eso implica hacer todas esas cosas agradables e ingeniosas que hace el iniciador predeterminado (varias páginas, arrastrar y soltar, eliminar / agregar iconos de aplicaciones, etc.). Afortunadamente, no es tan difícil como parece. Porque la aplicación de inicio predeterminada en sí misma es de android.googlesource.com/platform/packages/apps/Launcher2.git . Aunque este código está completo, no es fácil de leer. Un lugar más fácil para comenzar sería el SDK

Android-SDK/samples/android-x/Home/ where x is the API level.

Han proporcionado el código fuente para una pantalla de inicio de ejemplo y debería darle un buen comienzo. Con un poco de perseverancia y café, debería poder modificar el código de android.googlesource.com/platform/packages/apps/Launcher2.git para agregar una página personalizada propia.

Ahora la parte difícil .
Porque una parte de su objetivo es mantener las páginas existentes iguales y agregar una nueva página, haciendo que funcione para todos los sabores de Android ... HTC sense , Samsung TouchWiz , etc , etc no es una carga de trabajo de una sola persona. Todos tienen diferentes funciones para la pantalla de inicio. Preservar estas características y agregar una nueva página personalizada es una tarea difícil.

Estoy trabajando en la creación de un iniciador personalizado en Android. He referido el código del lanzador de Jellybean de Android. ahora quiero hacer algunas modificaciones en este lanzador.

Lo que quiero: como sabemos, hay cinco pantallas predeterminadas de espacio de trabajo y quiero agregar una vista personalizada en cualquiera de las pantallas del área de trabajo. Mi archivo xml debe estar inflado en cualquiera de las pantallas.

He intentado muchas formas de hacerlo, pero como el código de iniciador predeterminado es muy complejo, todavía no tengo suerte para encontrar el camino.

Ya hay una aplicación llamada SOHO en Playstore que está haciendo exactamente lo que yo quiero. He agregado la captura de pantalla para hacer referencia a lo que quiero.

Por favor, ayúdenme si alguno de ustedes tiene alguna idea de hacerlo.

Gracias de antemano.


Si mal no recuerdo, solo necesita implementar una actividad estándar que muestre un inicio de inicio. En su Manifest.xml solo necesita definirlo así:

<activity android:name=".YourLauncher" android:label="@string/launcher_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>


simplemente puede agregar vista en el código de uso del lanucher predeterminado

wm = (WindowManager) getSystemService("window"); params = new LayoutParams(); params.type = LayoutParams.TYPE_PHONE; params.format = PixelFormat.RGBA_8888; params.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE; params.x = 100; params.y = 100; params.height = WindowManager.LayoutParams.WRAP_CONTENT; params.width = WindowManager.LayoutParams.WRAP_CONTENT; params.gravity = Gravity.LEFT | Gravity.TOP; wm.addView(view, params);

cuando quieras eliminarlo solo

wm.removeView(v);

también necesitas permiso

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />


Tengo la respuesta para ti. Puedes hacerlo tanto en el paquete Launcher2 como en el programa Launcher3 de (AOSP). Jellybean está utilizando Launcher2 puede ser. Yo personalmente te sugiero que vayas con Launcher3 , tiene la forma perfecta de hacerlo.

Launcher3:

crea una clase que amplíe la clase com.android.launcher3.Launcher y anule los métodos necesarios de la siguiente manera:

public class MyLauncher extends Launcher { @Override protected boolean hasCustomContentToLeft() { return true; } @Override protected void addCustomContentToLeft() { View customView = getLayoutInflater().inflate(R.layout.custom, null); CustomContentCallbacks callbacks = new CustomContentCallbacks() { @Override public void onShow() {} @Override public void onScrollProgressChanged(float progress) {} @Override public void onHide() {} }; addToCustomContentPage(customView, callbacks, "custom view"); } }

Aquí R.layout.custom es la vista personalizada que quería. Luego, en el archivo de manifiesto, cambie la clase de actividad del MyLauncher de MyLauncher a MyLauncher . Y eso es.

Launcher2:

en Workspace.java crea el siguiente método:

public void addCustomView(View child){ CellLayout layout = (CellLayout) getChildAt(0); layout.addView(child); }

luego en Launcher.java , encuentra la siguiente línea:

mWorkspace = (Workspace) mDragLayer.findViewById(R.id.workspace);

luego pegue el siguiente código en algún lugar después de esa línea:

View child = LayoutInflater.from(this).inflate(R.layout.custom, null); mWorkspace.addCustomView(child);