2012-06-29 42 views
22

Có ai biết cách dễ dàng triển khai thanh tác vụ bằng hai nút kéo dài không?Thanh tác vụ Android với hai nút kéo dài

Dưới đây là một ví dụ về ứng dụng lịch của Google:

enter image description here

Cảm ơn bạn!

+0

Đây không phải là thanh tác vụ ... trông giống như tiện ích thả xuống của một số loại. –

+0

Tôi khá chắc chắn nó là. –

+0

bản sao có thể có của [Hủy nút Xong trong ứng dụng Lịch - Đây có phải là một phần của Thanh tác vụ không?] (Http://stackoverflow.com/questions/15103895/cancel-done-buttons-in-calendar-app-is-it-part -of-action-bar) –

Trả lời

38

Nếu bạn chứ không phải có điều này trong ActionBar vì lý do gì, một cách để đạt được điều này là bằng cách sử dụng một giao diện tùy chỉnh trên Action quán ba. Trong bố cục của Chế độ xem tùy chỉnh, hãy lo lắng về việc thiết lập chiều rộng nút.

Telling hoạt động để sử dụng một giao diện tùy chỉnh cho thanh tác vụ: sau đó

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final ActionBar ab = getActionBar(); 
    ab.setDisplayShowHomeEnabled(false); 
    ab.setDisplayShowTitleEnabled(false);  
    final LayoutInflater inflater = (LayoutInflater)getSystemService("layout_inflater"); 
    View view = inflater.inflate(R.layout.action_bar_edit_mode,null); 
    ab.setCustomView(view); 
    ab.setDisplayShowCustomEnabled(true); 
} 

bố trí/action_bar_edit_mode.xml có thể giống như thế:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:gravity="fill_horizontal" 
    android:orientation="horizontal" > 
    <LinearLayout 
     android:layout_alignParentLeft="true" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 

     <Button 
     android:id="@+id/action_bar_button_cancel" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent"   
     android:layout_weight="1" 
     android:text="Cancel" /> 

     <Button 
     android:id="@+id/action_bar_button_ok" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent"   
     android:layout_weight="1" 
     android:text="Ok" /> 
    </LinearLayout>  
</RelativeLayout> 

Hy vọng nó sẽ giúp người!

Lưu ý: Tôi nhận ra bố cục làm tổ xấu ở đây và bình thường tôi sẽ không đề xuất điều này nhưng vì lý do nào đó bố cục của thanh tác vụ không cho phép LinearLayout tự chiếm toàn bộ chiều rộng. Thông thường bạn nên tránh bố trí làm tổ không cần thiết như thế này! Có lẽ nếu ai đó thấy điều này, họ có thể chỉ cho chúng tôi một giải pháp tốt hơn?

gì nó trông giống như: result

EDIT: Có một excellent post bởi Roman Nurik nơi ông giải thích một cách để làm điều này rất độc đáo.

CHỈNH SỬA 2: Nếu có ai đó tò mò, cách chính xác để bố trí các nút để chúng mở rộng chiều rộng của thanh hành động mà không cần lồng bố trí như tôi đã làm ở trên, là đặt chế độ xem tùy chỉnh các thông số bố cục thích hợp cho phép thành phần của nó khớp với nhóm chính.

Về cơ bản:

actionBar.setCustomView(view,new ActionBar.LayoutParams(
     ViewGroup.LayoutParams.MATCH_PARENT, 
     ViewGroup.LayoutParams.MATCH_PARENT)); 
+0

Sử dụng chế độ xem tùy chỉnh trong kiểu này (với bố cục tương đối kéo dài) có tác dụng phụ khó chịu của việc ẩn menu mục bổ sung cho một số thiết bị . – Nariman

+0

Không thực sự là một tác dụng phụ khó chịu, đó thực sự là hiệu ứng mong muốn trong trường hợp này. Nếu bạn muốn tràn để vẫn hiển thị, bạn có thể muốn làm theo những gì các ứng dụng liên lạc nào (hoặc "DoneButtonActivity trên dự án Roma Nurik) và sắp xếp các nút bên trái là để cho phép tràn vẫn hiển thị. Tùy chọn bạn có thể thiết lập hoạt động của bạn với thanh tác vụ chia tách để tràn hiển thị ở dưới cùng. –

3

Tạo LinearLayout ngang bằng hai nút. Sau đó, đặt từng chiều rộng của chúng thành match_parentandroid:layout_weight="0.5" (Mỗi nút sẽ chiếm 50% không gian).

EDIT:

Để áp dụng như ActionBar nền:

(ActionBarSherlock) getSupportActionBar().setCustomView(R.layout.my_view); 
(ActionBar) getActionBar().setCustomView(R.layout.my_view); 
+0

Cách áp dụng LinearLayout này cho ActionBar? –

+0

Đề xuất của tôi sẽ không sử dụng ActionBar; nó liên quan đến việc tạo thủ công 'ActionBar' của riêng bạn bằng cách sử dụng LinearLayout với 2 nút và layout_weight – Guardanis

+0

Có vẻ như không có giải pháp nào tốt hơn. –

5

Tôi biết 2 cách để làm điều này, nhưng người ta không ở lại trên đầu trang.

Đây là 1:

Bạn cần phải ghi đè lên các phương pháp onCreateOptionsMenu, nhưng điều này là thêm vào ActionBar, bạn cần API 11 để làm điều này và khi bạn xoay màn hình nút này xuất hiện trên ActionBar, điều này phụ thuộc vào kích thước màn hình.

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{ 
    MenuItem add = menu.add(Menu.NONE, ADD_TIME, 0, R.string.add_time); 
    add.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 

    MenuItem qkAdd = menu.add(Menu.NONE, QUICK_ADD_TIME, 1, R.string.quick_add_time); 
    qkAdd.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
} 

và đây là kết quả:

enter image description here

nếu bạn đang sử dụng một Fragment bạn cần phải thiết lập setHasOptionsMenu để đúng, nếu không menu sẽ không hiển thị.

Đây là lần thứ 2:

cancel_done.xml 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/color_bar" 
android:orientation="horizontal" > 

<LinearLayout 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:dividerPadding="12dp" 
    android:orientation="vertical" 
    android:showDividers="end" > 

    <Button 
     android:id="@+id/button1" 
     style="@drawable/btn_cab_done_holo_light" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:background="@drawable/btn_cab_done_holo_light" 
     android:text="CANCEL" 
     android:textSize="14sp" /> 

</LinearLayout> 

<LinearLayout 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:dividerPadding="12dp" 
    android:orientation="vertical" 
    android:showDividers="beginning" > 

    <Button 
     android:id="@+id/button2" 
     style="@drawable/btn_cab_done_holo_light" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:background="@drawable/btn_cab_done_holo_light" 
     android:text="DONE" 
     android:textSize="14sp" /> 

</LinearLayout> 
</LinearLayout> 

phong cách tài nguyên btn_cab_done_holo_light.xml bạn có thể tìm thấy trên .. \ sdk \ nền tảng \ android - %% \ data \ res \ drawable và sau đó vào bố trí của bạn, bạn chỉ cần thêm:

 <include 
      android:layout_width="match_parent" 
      android:layout_height="48dp" 
      android:layout_gravity="fill" 
      layout="@layout/cancel_done" /> 

và đây là kết quả:

enter image description here

Hiện tại tôi không phải là cách tốt nhất, nhưng nó hoạt động.

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