2014-05-09 9 views
5

Tôi đang cố gắng viết mã Android để tạo ba trạng thái cho Android Switch. Ba trạng thái có nghĩa là BẬT - Mặc định - TẮT.Làm cách nào để thêm trạng thái thứ ba trong Android Switch?

Khi tôi mở ứng dụng, nút chuyển sẽ ở chế độ mặc định và nút sẽ ở chính giữa. Khi tôi sẽ kéo công tắc sang bên trái thì trạng thái sẽ chuyển thành ON và khi tôi sẽ kéo sang bên phải thì trạng thái sẽ chuyển thành TẮT.

Trong Android Switch, chúng tôi có hai trạng thái BẬT/TẮT. Tôi không thể tìm thấy bất kỳ kỹ thuật nào để thêm trạng thái thứ ba vào công tắc.

Làm cách nào để thêm trạng thái thứ ba trong Chuyển đổi Android?

+2

Tạo lớp chuyển đổi của riêng bạn làm chế độ xem tùy chỉnh. Android không phải là trạng thái ba trạng thái. Thực sự, nó có thể không được nhiều hơn một giờ để làm trong tổng số, bạn sẽ chờ đợi lâu hơn hy vọng cho câu trả lời ở đây. –

+0

có cho rằng bạn cần phải có với các vật dụng tùy chỉnh của bạn. – Mani

+0

Vâng tôi biết, đó là lý do tại sao tôi đã đăng câu hỏi của tôi ở đây ... xin vui lòng đề nghị tôi làm thế nào tôi có thể thêm các widget tùy chỉnh cho chuyển đổi. – MyProg

Trả lời

0

Bạn có thể thực hiện kiểm soát tùy chỉnh dựa trên điều khiển Android Switch có 3 trạng thái bạn muốn.

Bạn có thể tìm thấy một số thông tin ở đây:

http://developer.android.com/guide/topics/ui/custom-components.html

Hướng dẫn:

http://www.tutorialspoint.com/android/android_custom_components.htm

Cá nhân tôi muốn có những phương pháp được sử dụng trong hướng dẫn. Chỉ cần mở rộng từ lớp chuyển đổi trong chuyển đổi trạng thái 3 của bạn và cố gắng ghi đè lên các tiểu bang để thêm một phần ba.

+0

Cảm ơn người đàn ông cho hướng dẫn, nhưng tôi không nhận được, làm thế nào để mã cho chuyển đổi? – MyProg

+0

Bạn tạo một lớp ThreeStateSwitch và bạn mở rộng công tắc Android. Tra cứu phương thức nào được sử dụng trong chuyển đổi Android để khai báo trạng thái của nó và chỉ cần ghi đè phương thức đó để thêm vào trạng thái thứ ba của bạn. Đây là tài liệu về điều khiển chuyển đổi android: http://developer.android.com/reference/android/widget/Switch.html Bạn có thể tìm thấy hầu hết điều này bằng cách đơn giản tìm kiếm trong google btw. –

+1

Câu trả lời vô vọng, không có cách nào để thêm một tiểu bang thứ ba vào một Switch, nếu bạn tìm thấy một trong những xin vui lòng khai sáng cho tôi. – 3c71

1

Bạn có thể tạo một ImageButton tùy chỉnh để đạt được điều này, bạn cần 3 hình ảnh khác nhau trong trường hợp này. Bạn cũng có thể thêm nhiều tiểu bang nếu muốn.

public class FlashButton extends ImageButton{ 

    public enum FlashEnum { 
     AUTOMATIC, ON, OFF 
    } 

    public interface FlashListener { 
     void onAutomatic(); 
     void onOn(); 
     void onOff(); 
    } 

    private FlashEnum mState; 
    private FlashListener mFlashListener; 

    public FlashButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int next = ((mState.ordinal() + 1) % FlashEnum.values().length); 
       setState(FlashEnum.values()[next]); 
       performFlashClick(); 
      } 
     }); 
     //Sets initial state 
     setState(FlashEnum.AUTOMATIC); 
    } 

    private void performFlashClick() { 
     if(mFlashListener == null)return; 
     switch (mState) { 
      case AUTOMATIC: 
       mFlashListener.onAutomatic(); 
       break; 
      case ON: 
       mFlashListener.onOn(); 
       break; 
      case OFF: 
       mFlashListener.onOff(); 
       break; 
     } 
    } 

    private void createDrawableState() { 
     switch (mState) { 
      case AUTOMATIC: 
       setImageResource(R.drawable.ic_flash_auto); 
       break; 
      case ON: 
       setImageResource(R.drawable.ic_flash_on); 
       break; 
      case OFF: 
       setImageResource(R.drawable.ic_flash_off); 
       break; 
     } 
    } 


    public FlashEnum getState() { 
     return mState; 
    } 

    public void setState(FlashEnum state) { 
     if(state == null)return; 
     this.mState = state; 
     createDrawableState(); 

    } 

    public FlashListener getFlashListener() { 
     return mFlashListener; 
    } 

    public void setFlashListener(FlashListener flashListener) { 
     this.mFlashListener = flashListener; 
    } 

} 
+0

Sẽ không đẹp như lớp Switch và sử dụng drawables cho tất cả các bang không nhất thiết là mong muốn nếu 3 (hoặc n) trạng thái phải có thể tùy chỉnh, với thứ gì đó như setStatesText (new String [] {text1, text2, ...}); – 3c71

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