2

지원 라이브러리 V7에서 ActionBarActivity를 사용하고 있습니다. 그러나 메뉴 xml에서 android : showAsAction = "always"를 지정하면 아무 효과가 없습니다. Java 코드에서 onCreateOptionsMenu() 메서드를 사용하여 항목을 찾고 속성을 수동으로 설정해야합니다. 내 코드에 문제가 있습니까? 왜 이런 일이 생길까요?android : showAsAction = "탭 조각에 대해 항상"작동하지 않습니다.

menu1.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/menu_item1" 
     android:icon="@android:drawable/ic_menu_view" 
     android:title="menu1" 
     android:showAsAction="always"/> 
</menu> 

그리고 메뉴 2 : 여기

public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ActionBar actionBar = getSupportActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     actionBar.setDisplayShowTitleEnabled(false); 

     Tab tab = actionBar 
       .newTab() 
       .setText("ArtistFragment") 
       .setIcon(android.R.drawable.ic_input_add) 
       .setTabListener(
         new TabListener<ArtistFragment>(this, "ArtistFragment", ArtistFragment.class)); 
     actionBar.addTab(tab); 

     tab = actionBar 
       .newTab() 
       .setText("AlbumFragment") 
       .setIcon(android.R.drawable.btn_radio) 
       .setTabListener(
         new TabListener<AlbumFragment>(this, "AlbumFragment", AlbumFragment.class)); 
     actionBar.addTab(tab); 
    } 

    public static class TabListener<T extends Fragment> implements ActionBar.TabListener { 
     private Fragment mFragment; 
     private final Activity mActivity; 
     private final String mTag; 
     private final Class<T> mClass; 

     /** Constructor used each time a new tab is created. 
      * @param activity The host Activity, used to instantiate the fragment 
      * @param tag The identifier tag for the fragment 
      * @param clz The fragment's Class, used to instantiate the fragment 
      */ 
     public TabListener(Activity activity, String tag, Class<T> clz) { 
      mActivity = activity; 
      mTag = tag; 
      mClass = clz; 
     } 

     /* The following are each of the ActionBar.TabListener callbacks */ 

     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      // Check if the fragment is already initialized 
      if (mFragment == null) { 
       // If not, instantiate and add it to the activity 
       mFragment = Fragment.instantiate(mActivity, mClass.getName()); 
       mFragment.setHasOptionsMenu(true); //MUST manually set here 
       ft.add(android.R.id.content, mFragment, mTag); 
      } else { 
       // If it exists, simply attach it in order to show it 
       ft.attach(mFragment); 
      } 
     } 

     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      if (mFragment != null) { 
       // Detach the fragment, because another one is being attached 
       ft.detach(mFragment); 
      } 
     } 

     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      // User selected the already selected tab. Usually do nothing. 
     } 
    } 

    public static class ArtistFragment extends Fragment { 
     @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
     @Override 
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
      super.onCreateOptionsMenu(menu, inflater); 
      inflater.inflate(R.menu.menu1, menu); 
      // Manually set will take effect 
      menu.findItem(R.id.menu_item1) 
       .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
     } 
    } 

    public static class AlbumFragment extends Fragment { 
     @Override 
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
      super.onCreateOptionsMenu(menu, inflater); 
      inflater.inflate(R.menu.menu2, menu); 
      // XML set android:showAsAction="always" does not work 
     } 
    } 
} 

그리고 두 개의 메뉴 XML 파일 : 여기

document sample에서 가장, 내 활동 코드 .xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
     android:id="@+id/menu_item2" 
     android:icon="@android:drawable/ic_menu_view" 
     android:title="menu2" 
     android:showAsAction="always"/> 
</menu> 

답변

10

문제가 THIS PAGE

트릭에 게시 대답에 감사를 해결 난이 나의 메뉴 xml 파일을 수정해야한다는 것입니다 : 공식 문서에서

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:mytest="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/menu_item1" 
     android:icon="@android:drawable/ic_media_ff" 
     android:title="menu1" 
     mytest:showAsAction="always"/> 
</menu> 

하는이 이유의 설명이 필요하다 :

XML을 사용하면 지원 라이브러리에서 속성

위 showAsAction 속성은 태그에 정의 된 사용자 정의 네임 스페이스를 사용합니다. 지원 라이브러리에 정의 된 XML 속성을 사용하는 경우에는 이 필요합니다. 이러한 속성은 구형 장치의 Android 프레임 워크에 존재하지 않기 때문에입니다. 따라서 지원 라이브러리에서 정의한 모든 속성의 접두사로 고유 한 네임 스페이스를 사용해야합니다. 이 코드를 해결

0

내 문제 : 나는 app:showAsAction="always"android:showAsAction="always"을 수정하고 내 문제는

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_add_projects" 
     app:showAsAction="always" 
     android:icon="@drawable/ic_action_add_project" 
     android:title="@string/add_project" /> 
</menu> 

를 해결
관련 문제