Facebook Android'de Sohbet Kafalarını nasıl oluşturur? Diğer tüm görünümlerin üstünde kayan görünümler oluşturmak için API nedir?
Facebook Android'de Sohbet Kafalarını nasıl oluşturur? Diğer tüm görünümlerin üstünde kayan görünümler oluşturmak için API nedir?
Yanıtlar:
Bu :
Uygulamaya, diğer tüm uygulamaların üstünde gösterilen TYPE_SYSTEM_ALERT türünü kullanarak pencere açma izni verir. Çok az uygulama bu izni kullanmalıdır; bu pencereler kullanıcıyla sistem düzeyinde etkileşim için tasarlanmıştır.
Sabit Değer: "android.permission.SYSTEM_ALERT_WINDOW"
// DÜZENLEME: Burada tam kod :
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);
}
}
Hizmeti bir şekilde başlatmayı unutmayın:
startService(new Intent(context, ChatHeadService.class));
.. Ve bu hizmeti Manifestinize ekleyin.
Kural olarak, Android etkinlikleri tam ekran, tüm etkileşimi alan kavramsal olarak ayrılmış kullanıcı arayüzleridir. Bunun birkaç istisnası var. Başlangıç olarak, ekranı doldurmayan açılır iletişim kutuları vardır. Bir diğeri, etkileşimli olmayan bir pop-up olan Android tostudur - ona dokunamazsınız ve denerseniz, altındaki her şeye gider.
Kendi özel kullanıcı arayüzlerinizi de yapabilirsiniz. Görünümleri doğrudan WindowManager
bir tür bayrağı belirterek ekleyebilirsiniz . Chat Heads muhtemelen TYPE_PHONE kullanıyor . Birkaç benzer tür vardır, ancak amaç aynıdır: görünüşe göre ana uygulama olmadan başka herhangi bir şeyin üstünde görünebilen özel amaçlı bindirmeler.
Ancak bu, etkileşimle ilgili sorunlar nedeniyle sizi şimdiye kadar götürüyor. İlk başta, yer paylaşımınız tüm etkileşimi emer, böylece sadece kafa olayları almakla kalmaz, aynı zamanda altındaki her şeyle etkileşimi de engellersiniz.
Bu davranışı LayoutParams kullanarak yapılandırın . FLAG_NOT_TOUCH_MODAL
görüntüleme alanınızın dışındaki etkinliklerin temeldeki kullanıcı arayüzlerine gittiği anlamına gelir. Artık işe yaradığını göreceksiniz, ancak geri / menü düğmeleri uygulamalara yönlendirilmiyor, ayrıca klavye yok gibi diğer kötü şeyler hala oluyor. İhtiyacınız olanı çözmek için FLAG_NOT_FOCUSABLE
.
Odaklanamayan bitten de bir yan etki elde edersiniz, bu da artık bindirmenizle hoş bir etkileşim olmaz, örneğin düğmeye basma. Yine de, her zaman matematik yapabileceğiniz bazı temel dokunma olayları alabilirsiniz ve bu muhtemelen Sohbet Kafaları için yeterlidir. Sizi UI animasyonu gibi birçok alanda kendi başınıza bıraktığını unutmayın.
Bu StackOverflow iş parçacığında , seçici etkileşim tüketimine izin verme de dahil olmak üzere ayrıntılara iyi bir genel bakış bulabilirsiniz . Özellikle cevap bağlantılarından biri sonunda sizi buraya götürecektir , bu da iyi bir örnek projedir. ICS'nin bunun çalışma şeklini biraz değiştirdiğini, ancak iş parçacıklarının bunu açıkladığını unutmayın.
Bu, herkese açık API şeyleridir, ancak elbette yapılması gereken genel bir şey gibi görünmemektedir. Dokümantasyon, özel sistem uygulama davranışlarına referanslarla ve iyi bir sebeple doludur; ya herkes yaptıysa?
Yaylı kafalar , sohbet kafalarının yaylı davranışını kutudan çıkarır. Tek yapmanız gereken, sohbet başlığı tıklatıldığında sohbet başlığının ve parçanın açılması için çekilebilir. Sohbet kafaları simge durumuna küçültüldüğünde çöker ve sürüklendiğinde parmağınızı takip eder.
Proje, tüm yerleşik işlevselliği gösteren bir demo uygulaması içerir. Bunu kullanmak için bunu sınıf bağımlılıklarınıza eklemeniz gerekir.
compile 'com.flipkart.springyheads:library:0.9.6'