2011-08-22 3 views
17

Honeycomb ActionBar에 불확정 진행 막대를 추가하여 사용자가 "새로 고침"을 누를 때마다 새로 고침 아이콘이 일시적으로 불확정 진행 막대로 바뀔 때까지 작업이 완료됩니다. 전자 메일 응용 프로그램은 이미이 작업을 수행하지만 방법을 파악할 수는 없습니다.ActionBar 메뉴 항목 아이콘을 불확실한 ProgressBar로 바꾸기

어떤 조언이 필요합니까?

+0

관련 : http://stackoverflow.com/questions/9731602/animated-icon-for-actionitem – rds

답변

5

전자 메일 앱의 기능을 정확히 설명하기는 어렵지만 간단히 말하면 에 StateDrawable XML 파일의 ID로 전화 한 다음 타이머를 사용하여 상태를 변경하면됩니다.

+1

설정 아이콘이 실행 바 자체에 대한 탭 아이콘 만 가능하지. 이것은 ActionIcons에도 우연히 작동합니까? 아니면이 답변이 잘못 되었습니까? – Janusz

4

Google은 광범위한 ActionBarCompat 호환성 프로젝트의 일환으로이 작업을 정확하게 수행 한 사례를 게시 한 것으로 나타났습니다. Have a look.

+0

이 예제는 표시/숨기기를 사용하여 인접한 새로 고침 아이콘 및 불확정 진행률과 함께 설정된 레이아웃을 사용합니다. ActionBar에는 레이아웃이나 액세스 권한이 없습니다. Femi의 아이디어를 다음 단계로 시도합니다 ... – larham1

+0

예전 장치에서 표시/숨기기를 사용합니다 (예; 그러나 ActionBarHelperHoneycomb/ActionBarHelperICS 클래스를 살펴보면 ICS 및 Honeycomb에도 적절하고 업데이트 된 방법을 제공합니다. 그것은 모든 장치에서 작동합니다 (나도 알아, 나는 2.1+, 3.x 및 4.x에 대한 내 자신의 응용 프로그램에서이를 활용하고 있으며 모든 응용 프로그램에서 작동하며 불확실한 진행률 막대가 포함되어 있습니다.) –

+0

링크가 끊어졌습니다 Google은 URL을 삭제하기로 결정했습니다. 한숨) – Adam

3

내가 여기에 원래 문제에서 제공되는 코드를 사용하고 있습니다 : https://github.com/JakeWharton/ActionBarSherlock/issues/425android:layout_widthandroid:layout_height 내가 32dp를 사용합니다 (actionbar_indeterminate_progress.xml에서) 제외

; 이것이 바로 ActionBarCompat에서 수행 된 방식이었습니다. http://developer.android.com/resources/samples/ActionBarCompat/res/layout-v11/actionbar_indeterminate_progress.html

17

Jon O의 답을 명확히하기 위해, 새로 고침 작업에 대한 동작보기를 설정 및 설정 해제하는 것이 핵심입니다. 이것은 ActionBarSherlock 및 네이티브 4.x 작업 표시 줄에서 작동합니다. 다음 코드는 'progress_wheel'레이아웃에있는 새로 고침 메뉴 항목 ID 'refresh_option'와 (A적인 진행률이) 대체 레이아웃이 가정, 새로 고침 아이콘 위에 진행 불확실한 전망을 넣어 것입니다 :

MenuItem item = abmenu.findItem(R.id.refresh_option); 
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View abprogress = inflater.inflate(R.layout.progress_wheel, null); 
item.setActionView(abprogress); 

진행보기 및 새로 고침 아이콘 설정 해제 가시성으로 돌아갑니다 :

item.setActionView(null); 

은 GitHub의에 a more detailed example를 참조하십시오.

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_refresh: 
       item.setActionView(new ProgressBar(this)); 
       break; 
     } 
     return super.onOptionsItemSelected(item); 
+0

문제는 새 ProgressBar가 일반 작업 항목보다 약간 넓습니다. 따라서 모든 이웃 항목이 표시됩니다 (그리고 "jumb back"이 사라질 때). 이 문제를 해결하는 방법에 대한 아이디어가 있습니까? –

2

당신은 쉽게 그것을 할 수 있습니다 : 새로 고침/상쾌한 대한

item.setActionView(R.layout.progress_bar); 
+0

문제는 새 ProgressBar가 일반 작업 항목보다 약간 넓습니다. 따라서 모든 이웃 항목이 표시됩니다 (그리고 "jumb back"이 사라질 때). 이 문제를 해결하는 방법에 대한 아이디어가 있습니까? –

+0

나는''''layout_gravity. 메뉴 항목 이동을 피할 수 있습니다. '''item.setActionView (R.layout.your_layout);'''를 설정하는 것을 기억하십시오. –

4

larham1's answer을 단순화하기 위해 : 당신은 단순히 쓸 수 있도록도, 액션 레이아웃의 ID를 받아 the method을 가지고 자체 MenuItem 때문에 새로운 액션보기를 팽창 할 필요가 없습니다