2013-04-20 14 views
5

Zajmuję się tworzeniem aplikacji, w której muszę pokazać szybkie okno dialogowe akcji po kliknięciu przycisku. Oto przykład, w jaki sposób chcę to wdrożyć.Dostosuj okno szybkiej akcji dla Androida

What I want to implement.

Do tej pory nie mogę dowiedzieć się, jak zrobić okno zwyczaj szybkiego działania. Ale próbowałem użyć działania i trochę tego, co mam blisko, co muszę osiągnąć. Oto, co zrobiłem do tej pory.

Na kliknięcie przycisku jestem przechodzącej zamiar działalności:

if (v.getId() == R.id.points) { 
     Toast.makeText(MainActivity.this, "Clicked on points", 
       Toast.LENGTH_SHORT).show(); 
     Intent i = new Intent(MainActivity.this, PointsActionMenu.class); 
     startActivity(i); 
    } 

I użyłem styles.xml aby aktywność przejrzyste.

Styles.xml

<style name="Theme.Transparent" parent="android:Theme"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
</style> 

Wdrożenie tych rzeczy mam ten UI na ekranie. Reached till here

Teraz mam dwa pytania:

  1. Użyłem aktywności i zaprojektował układ do pracy dla moich potrzeb. Jest to prosty sposób na zaimplementowanie tego przy użyciu okna szybkiego działania. I przeszedłem 2-3 przykłady tego, ale nie byłem w stanie dostosować go zgodnie z moimi potrzebami.
  2. O ile zaimplementowałem za pomocą działania, jest ono wyświetlane na środku ekranu, czy mogę zmienić domyślne miejsce aktywności na prawy róg, jak pokazano na rysunku.

Każda z odpowiedzi może mi pomóc.

Każdy rodzaj pomocy zostanie doceniony za to.

+0

Czy próbowałeś 'android: gravity' do problemu numer # 2? –

Odpowiedz

2

Myślę, że rozwiązałem mój problem. Oto, jak to wygląda.

What I found

Zintegrowany następujący kod do ustawiania to stanowisko.

WindowManager.LayoutParams wmlp = this.getWindow().getAttributes(); 

    wmlp.gravity = Gravity.TOP | Gravity.LEFT; 
    wmlp.x = 80; // x position 
    wmlp.y = 60; // y position 
+0

Zaznacz własną odpowiedź jako prawą. –

+0

Czy testowałeś go na innych rozmiarach i gęstościach ekranu? Jeśli nie chcesz, aby działało tylko na jednym urządzeniu, może to spowodować późniejsze bóle głowy. – RobGThai

+0

@Aupupam Mam również rozwijać podobne okno dialogowe. Czy możesz udostępnić swój kod okna wyskakującego? – GrIsHu

2

Możesz zastanowić się, co dzieje się na różnych urządzeniach i rozmiarach ekranu. Rozważmy skalowanie pikseli DP z tego:

int x = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics()); 
int y = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()); 

EDIT:

wmlp.x = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics()); 
wmlp.y = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()); 
+0

Gdzie powinienem to wdrożyć? – Anupam

+0

Edytowałem swoją odpowiedź. - Ta funkcja konwertuje dowolną wartość "piksela" na odpowiednią wartość "dp". – LuckyMe

Powiązane problemy