2013-07-26 5 views
3

ActionBarSherlock을 구현 중입니다. 나는 아이콘과 제목을 사용할 수 없게했다. 그러나 아직도 나의 품목은 그 공간을 차지하지 않고있다. 내가 사용했습니다채우기 작업 표시 줄

getSupportActionBar().setDisplayShowTitleEnabled(false); 
    getSupportActionBar().setDisplayShowHomeEnabled(false); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(false); 

아이콘과 제목이 사라졌습니다. 하지만 그 공간은 내 물건으로 가득 차 있지 않습니다.

<item android:id="@+id/Clear" 
    android:title="Clear" 
    android:showAsAction="ifRoom"></item> 
<item android:id="@+id/load" 
    android:title="Load" 
    android:showAsAction="ifRoom"></item> 
<item android:id="@+id/Undo" 
    android:title="Undo" 
    android:showAsAction="ifRoom"></item> 
<item android:id="@+id/save" 
    android:title="Save" 
    android:showAsAction="ifRoom"></item> 
<item android:id="@+id/settings" 
    android:title="Settings" 
    android:showAsAction="ifRoom"></item> 

과 같은 5 개의 항목이 있지만 그 중 3 개만 표시됩니다. 액션 바가 가득 차 있지 않습니다. 나는 모든 항목이 작업 표시 줄에 표시 할

enter image description here

것입니다. 나는 어떻게해야합니까?

편집 :

표시 줄에 탭을 추가하려고합니다. 그것은 런타임 오류를 제공합니다.

Tab tab = getSupportActionBar().newTab(); 
protected void onCreate(Bundle savedInstanceState) { 

    getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    for (int i = 1; i <= 3; i++) { 

     tab.setText("Tab " + i); 

     getSupportActionBar().addTab(tab); 
    } 
    } 

는이 코드가 표시 줄에 탭을 추가하기에 충분해야한다고 생각 여기에 탭을 추가하는 내 코드는 (그것은 꽤 간단해야하지만 난 내가 잘못 여기서 뭐하는 거지 모른다). 안 그래? 이 탭을 사용하는 경우

+0

질문은 버튼 일 경우 실제로 작업 표시 줄이 필요합니까? 버튼이 달린 바를 놓는 것은 어떨까요? –

+0

나는 캔바스에이 행동 바를 가지고있다. 손가락 페인팅 앱입니다. 나는 캔버스에 단추를 넣을 수 없다. 나는 ABS가 나의 캔버스에 적합한 선택이라고 생각한다. – VipulKumar

+1

android : showAsAction = "always"를 사용하면 어떤 결과가 나타 납니까? – tasomaniac

답변

1

당신은, onPrepareOptionsMen 사용하거나 당신이 당신에있는 탭에 따라 버튼을 변경할 수 있습니다 viewpager (단지 스위치 케이스가 있었다) :

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

    menu.clear(); 
    switch ((int) _viewPager.getCurrentItem()) { 
     case 0: 
      getSupportMenuInflater().inflate(R.menu.empty_menu, menu); 
      break; 
     case 1: 
      getSupportMenuInflater().inflate(R.menu.your_menu, menu); 
      break; 
     case 2: 
      getSupportMenuInflater().inflate(R.menu.empty_menu, menu); 
      break; 
    } 
    return super.onPrepareOptionsMenu(menu); 
} 

또는 하나 개의 간단한 메뉴를 judte

@Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     menu.clear(); 
     getSupportMenuInflater().inflate(R.menu.your_menu, menu); 
     return true; 
    } 

당신 만의 메뉴 xml 파일에 항목을 넣을 필요가

* 탭을 추가하려면 : *

public class MainActivity extends SherlockFragmentActivity { 
private static final String  TAG = MainActivity.class.getSimpleName(); 
private ViewPager    _viewPager; 
private ActionBar    _actionBar; 
private Tab      _Tab; 
private TabsAdapter    _tabAdapter; 
private int      _viewPagerOffScreenLimit  = 10; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     _viewPager = (ViewPager) findViewById(R.id.viewpager); 
     _viewPager.setOffscreenPageLimit(_viewPagerOffScreenLimit); 
     _tabAdapter = new TabsAdapter(this, _viewPager); 
     _actionBar = getSupportActionBar(); 
     _actionBar.setTitle(getResources().getString(R.string.app_name)); 
     _actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     _actionBar.setHomeButtonEnabled(true); 

     _tabAdapter.addTab(_actionBar.newTab().setCustomView(getTabIndicator(getString(R.string.tab), R.drawable.ic_launcher)), FragmentTab.class, null); 
} 
private View getTabIndicator(String text, int drawable) { 

     View indicator = _inflater.inflate(R.layout.tabs, null); 
     ((TextView) indicator.findViewById(R.id.tab_title)).setText(text); 
     ((ImageView) indicator.findViewById(R.id.tab_icon)).setImageResource(drawable); 
     return indicator; 
    } 

public static class TabsAdapter extends FragmentPagerAdapter implements ActionBar.TabListener, ViewPager.OnPageChangeListener { 
     private final Context    mContext; 
     private final ActionBar    mActionBar; 
     private final ViewPager    mViewPager; 
     private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 

     static final class TabInfo { 
      private final Class<?> clss; 
      private final Bundle args; 
      TabInfo(Class<?> _class, Bundle _args) { 
       clss = _class; 
       args = _args; 
      } 
     } 


     public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) { 
      super(activity.getSupportFragmentManager()); 
      mContext = activity; 
      mActionBar = activity.getSupportActionBar(); 
      mViewPager = pager; 
      mViewPager.setAdapter(this); 
      mViewPager.setOnPageChangeListener(this); 
     } 

     public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) { 
      TabInfo info = new TabInfo(clss, args); 
      tab.setTag(info); 
      tab.setTabListener(this); 
      mTabs.add(info); 
      mActionBar.addTab(tab); 
      notifyDataSetChanged(); 
     } 

     @Override 
     public int getCount() { 
      return mTabs.size(); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      TabInfo info = mTabs.get(position); 
      return Fragment.instantiate(mContext, info.clss.getName(), info.args); 
     } 

     public void onPageSelected(int position) { 
      mActionBar.setSelectedNavigationItem(position); 
      ((SherlockFragmentActivity) mContext).supportInvalidateOptionsMenu(); 
     } 

     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      Object tag = tab.getTag(); 
      for (int i = 0; i < mTabs.size(); i++) { 
       if (mTabs.get(i) == tag) { 
        mViewPager.setCurrentItem(i); 
       } 
      } 
     } 
    } 
} 
+0

이것은 실제로 좋은 접근 방법입니다. 나는 그것을 고려하고있다. 하지만 또 다른 문제가 있습니다. 탭이 추가되지 않습니다. 나는이 주제에 대해 상당히 새로운 것이다. 내 코드를 참조하십시오 'ActionBar.Tab tab = getSupportActionBar(). newTab(); protected void onCreate (Bundle savedInstanceState) { getSupportActionBar(). setNavigationMode (ActionBar.NAVIGATION_MODE_TABS); for (int i = 1; i <= 3; i ++) { tab.setText ("Tab"+ i); getSupportActionBar(). addTab (탭); } } ' 런타임 오류가 발생합니다. 평소처럼, 불행히도, 앱이 중지되었습니다. – VipulKumar

+0

일부 코드를 표시하려면 질문을 편집하십시오./ABS 읽기를 사용하여 concider해야 할 탭이 필요하면 –

+0

을 읽기가 어렵습니다. http://actionbarsherlock.com/ –