2014-09-02 9 views
3

조각에서 주요 활동으로 돌아가고 있으며 일부 로직의 경우 작업 표시 줄 메뉴에서 아이콘의 모양을 변경해야합니다.프로그래밍 방식으로 ActionBar 아이콘 변경

<?xml version="1.0" encoding="utf-8"?> 

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="it.gn.sfa.Main"> 


    <item 
     android:id="@+id/action_search" 
     android:actionViewClass="android.widget.SearchView" 
     android:icon="@drawable/ic_action_search" 
     android:showAsAction="collapseActionView|ifRoom" 
     android:title="Search" /> 
    <item 
     android:id="@+id/action_filter" 
     android:icon="@drawable/ic_action_filter_empty" 
     android:showAsAction="ifRoom" 
     android:title="Filter" /> 
    <item 
     android:id="@+id/action_new" 
     android:icon="@drawable/ic_action_new" 
     android:showAsAction="ifRoom" 
     android:title="New" /> 

</menu> 

나는 sencond 항목 (ID를 가진 하나 = action_filter)을 변경해야합니다 :

은 작업 표시 줄에있는 메뉴입니다. 다른 게시물에서 다른 해결책을 찾았습니다. 가장 평점은

mOptionsMenu.getItem(0).setIcon(getResources().getDrawable(R.drawable.ic_action_filter)); 

이며 작동하지 않는 것 같습니다.

다른 쪽에서는 getActionBar().setIcon(getResources().getDrawable(R.drawable.ic_action_filter)); 로고가 바뀌므로 원하지 않습니다.

어떻게 메뉴의 두 번째 항목 만 변경할 수 있습니까?

+1

mOptionsMenu와 관련된 모든 코드를 게시 할 수 있습니까? 특히,이 mOptionsMenu 변수를 인스턴스화하는시기 및 방법 –

+0

onCreateOptionsMenu (메뉴 메뉴)에서 mOptionsMenu를 인스턴스화합니다. mOptionsMenu = menu. – Luca

+0

내 대답을 확인하십시오 : http://stackoverflow.com/a/28478791/1038702 – David

답변

15

는 내가 도움이 될 희망이 도움이 :)

+0

그런 식으로 mOptionsMenu가 바로 사용됩니다. 그러나 그 선 다음에 나는 다른 레이아웃을 부 풀린다. 그게 문제 야? – Luca

+0

방금 ​​시도하고 mOptionsMenu.findItem (R.id.action_filter) .setIcon (R.drawable.ic_action_filter); 나에게 nullPointerException을 준다. – Luca

+0

흠, 여기에 귀하의 npe 게시, 내 대답은 나를 위해 일했기 때문에, 나는 내 자신의 테스트 케이스에서 그것을 테스트했습니다. – Spurdow

3

를 희망 당신이 모든

private Menu mOptionsMenu; 
... 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // TODO Auto-generated method stub 
    // inflating your menu here 
    mOptionsMenu = menu; 
    return super.onCreateOptionsMenu(menu); 
} 

mOptionsMenu에 설정 한 가정이 한

mOptionsMenu.findItem(R.id.action_filter).setIcon(R.drawable.ic_action_filter); 

하려고하면

에 대한
getSupportActionBar().setHomeButtonEnabled(true); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffffff'>" + "Messages" + "</font>")); 
    getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.messagebar_color))); 
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow_black); 
0

이 방법으로 아이콘을 회전/변경 관리 :

MenuItem item = getToolbar().getMenu().findItem(Menu.FIRST); 
<prepare the image view from drawable here> 
item.setActionView(imageView); 

정상적으로 작동합니다. 대신 간단히 item.setIcon()을 사용할 수도 있습니다.

1

당신은 내가 프로그래밍 내 검색 표시 줄의 색상을 변경하여 의 onCreateOptionsMenu (메뉴 메뉴)

수정해야합니다. 여기에 코드를 게시하고 있습니다. 희망이 도움이됩니다.

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.items, menu); 
    menu.getItem(0).setIcon(getTintedDrawable(R.drawable.search, R.color.blue)); 
    return super.onCreateOptionsMenu(menu); 
} 

어디 getTintedDrawable()가 나는 그리기를 반환하는 생성 함수이다. 따라서 getTintedDrawable(R.drawable.search, R.color.blue)을 drawable로 대체하면됩니다.

참고 : menu/items.xml에 정의 된 항목이 하나 뿐이므로 menu.getItem(0) 코드를 사용했습니다. 여러 번 시도하는 경우 다른 값을 시도하십시오 (메뉴 항목 수보다 0에서 1까지). 내 추측은 항목이 정의 된 번호이지만 너무 확신하지는 않습니다.