Jakie interfejsy API są używane do rysowania nad innymi aplikacjami (takimi jak Facebook ' s Chat Heads)?

Jak Facebook tworzy czaty na Androidzie? Co to jest interfejs API do tworzenia widoków pływających na wszystkich innych widokach?

Author: Ryan M, 2013-04-12

3 answers

Ten jeden:

Pozwala aplikacji na otwieranie okien przy użyciu typu TYPE_SYSTEM_ALERT, wyświetlany na wszystkich innych aplikacjach. Bardzo niewiele aplikacji powinno używać tego uprawnienia; okna te są przeznaczone do interakcji na poziomie systemu z użytkownikiem.

Stała wartość: "android.pozwolenie.SYSTEM_ALERT_WINDOW "

//edytuj: Pełny kod tutaj :

public class ChatHeadService extends Service {

  private WindowManager windowManager;
  private ImageView chatHead;

  @Override public IBinder onBind(Intent intent) {
    // Not used
    return null;
  }

  @Override public void onCreate() {
    super.onCreate();

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    chatHead = new ImageView(this);
    chatHead.setImageResource(R.drawable.android_head);

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_PHONE,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.LEFT;
    params.x = 0;
    params.y = 100;

    windowManager.addView(chatHead, params);
  }

  @Override
  public void onDestroy() {
    super.onDestroy();
    if (chatHead != null) windowManager.removeView(chatHead);
  }
}

Nie zapomnij jakoś uruchomić serwisu:

startService(new Intent(context, ChatHeadService.class));

.. I dodaj tę usługę do manifestu.

 218
Author: Waza_Be,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-03 20:21:11

Z reguły działania na Androida są pełnoekranowymi, koncepcyjnie dedykowanymi interfejsami użytkownika, które zajmują całą interakcję. Jest od tego kilka wyjątków. Na początek są wyskakujące okna dialogowe, które nie wypełniają ekranu. Innym jest Android toast, który jest nieinteraktywnym wyskakującym okienkiem - nie możesz go dotknąć, a jeśli spróbujesz, przejdzie do tego, co jest pod spodem.

Możesz też zrobić swój własny specjalny interfejs użytkownika. Widoki można dodawać bezpośrednio do WindowManager, podając znacznik type. Chat Heads prawdopodobnie używa TYPE_PHONE . Istnieje kilka podobnych typów, ale przeznaczenie jest takie samo: nakładki specjalnego przeznaczenia, które mogą pojawić się na wierzchu czegokolwiek innego, bez widocznej obecności aplikacji nadrzędnej.

To tylko do tej pory, z powodu problemów z interakcją. Na początku Twoja nakładka wchłonie całą interakcję, więc nie tylko głowa dostaje zdarzenia, ale blokujesz interakcję ze wszystkim, co znajduje się pod spodem.

Konfigurujesz to zachowanie używając LayoutParams . FLAG_NOT_TOUCH_MODAL oznacza, że zdarzenia spoza obszaru wyświetlania trafiają do bazowego interfejsu użytkownika. Teraz przekonasz się, że to działa, ale inne złe rzeczy nadal się zdarzają, takie jak przyciski z tyłu / menu nie są kierowane do aplikacji, plus brak klawiatury. Do rozwiązania tego potrzebujesz FLAG_NOT_FOCUSABLE.

Otrzymujesz efekt uboczny z nieostre też bit, który nie jest już miły interakcji z nakładką, np. naciśnięcie przycisku. Można jednak uzyskać podstawowe zdarzenia dotykowe, na których zawsze można wykonać matematykę i to chyba wystarczy dla gadających głów. Pamiętaj tylko, że pozostawia cię on sam w wielu obszarach, takich jak animacja interfejsu użytkownika.

Dobry przegląd szczegółów, w tym umożliwienie selektywnej konsumpcji interakcji, można znaleźć w wątku Stoskoverflow . W szczególności jeden z linków odpowiedzi zabierze cię tutaj, który jest dobrym przykładem projektu. Zauważ, że ICS trochę zmieniło sposób, w jaki to działa, ale wątki to wyjaśniają.

To wszystko jest publiczne API rzeczy, ale tak naprawdę nie wydaje się to głównym nurtem rzeczy, które należy robić jako rzecz jasna. Dokumentacja jest zaśmiecona odniesieniami do specjalnych zachowań aplikacji systemowych i nie bez powodu; co, jeśli wszyscy to zrobili?

 52
Author: Rob Pridham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:51

Springy heads daje Spring oparte zachowanie czat głowy po wyjęciu z pudełka. Wszystko, co musisz zdefiniować, to możliwość narysowania głowicy czatu i fragmentu, który zostanie otwarty po kliknięciu głowicy czatu. Głowy czatu zwijają się po zminimalizowaniu i podążają za palcem po przeciągnięciu.

Projekt zawiera aplikację demonstracyjną, która demonstruje wszystkie wbudowane funkcje. Aby go użyć, musisz dodać to do swoich zależności gradle.

compile 'com.flipkart.springyheads:library:0.9.6'
 7
Author: Kiran Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-28 00:12:09