2013-04-20 33 views
5

Tôi đang phát triển một ứng dụng mà trong đó tôi phải hiển thị hộp thoại hành động nhanh khi nhấp vào nút. Đây là một ví dụ về cách tôi muốn nó thực hiện.Tùy chỉnh hộp thoại hành động nhanh cho android

What I want to implement.

Đến bây giờ tôi không thể tìm ra cách để thực hiện một hộp thoại hành động tùy chỉnh nhanh chóng. Nhưng tôi đã thử sử dụng một hoạt động và một số điều tôi gần với những gì tôi phải đạt được. Đây là những gì tôi đã làm cho đến bây giờ.

On click vào nút Tôi đang đi qua ý định hoạt động:

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); 
    } 

Và tôi đã sử dụng styles.xml để làm cho hoạt động này trong suốt.

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> 

Thực hiện những điều này tôi đã có giao diện người dùng này trên màn hình của tôi. Reached till here

Bây giờ, tôi có hai câu hỏi:

  1. Tôi đã sử dụng hoạt động và được thiết kế một cách bố trí để làm việc cho nhu cầu của tôi. Là có bất kỳ cách dễ dàng nào để thực hiện việc này bằng hộp thoại hành động nhanh. Tôi đã trải qua 2-3 ví dụ cho điều đó, nhưng tôi không thể tùy chỉnh nó theo nhu cầu của tôi.
  2. Theo như tôi đã thực hiện bằng cách sử dụng một hoạt động, nó được hiển thị ở trung tâm của màn hình, tôi có thể thay đổi vị trí mặc định của hoạt động sang góc phải như trong hình.

Câu trả lời có thể giúp tôi.

Bất kỳ loại trợ giúp nào sẽ được đánh giá cao về điều này.

+0

bạn đã thử 'android: gravity' cho vấn đề số # 2? –

Trả lời

2

Tôi nghĩ rằng tôi đã giải quyết được vấn đề của mình. Ở đây nó bây giờ là những gì nó trông giống như.

What I found

Tích hợp mã sau để đặt vị trí của nó.

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

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

Đánh dấu câu trả lời của riêng bạn là đúng. –

+0

Bạn đã thử nghiệm trên các kích thước và mật độ màn hình khác chưa? Trừ khi bạn chỉ muốn nó chạy trên một thiết bị duy nhất, điều này có thể giới thiệu bạn đau đầu sau này. – RobGThai

+0

@Anupam Tôi cũng đã phát triển loại hộp thoại bật lên tương tự. Bạn có thể chia sẻ mã cửa sổ bật lên của mình không? – GrIsHu

2

Bạn có thể muốn xem xét điều gì xảy ra trên các thiết bị và kích thước màn hình khác nhau. xem xét mở rộng quy mô các điểm ảnh để DP với điều này:

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

Tôi nên triển khai điều này ở đâu? – Anupam

+0

Tôi đã chỉnh sửa phản hồi của mình. - Hàm đó chuyển đổi bất kỳ giá trị "pixel" nào bạn cung cấp thành giá trị "dp" thích hợp. – LuckyMe

Các vấn đề liên quan