2016-08-11 10 views
1

오른쪽에 탭이 놓여있는 휴면과 같은 탭으로 앱을 만들고 싶습니다. 나는 불행히도 그들 중 누구도 일하지 않은 많은 방법을 시도합니다. 몸을 좀 도와 주 옵소서.Android 소재 디자인 오른쪽 맞춤 탭

enter image description here

업데이트

내 활동 : 내가 추가 할 수 있습니다

public class MainActivity extends AppCompatActivity { 

    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_main); 

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 


     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     viewPager.setAdapter(adapter); 

     tabLayout.setupWithViewPager(viewPager); 

    } 
    // 
    static int count = 1; 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    public void addTab(View v){ 
     Bundle bundle = new Bundle(); 
     bundle.putInt("index", count); 
     MyFragment fragment = new MyFragment(); 
     fragment.setArguments(bundle); 

     adapter.addFragment(fragment, "Tab "+count++); 

     TabLayout.Tab tab = tabLayout.getTabAt(adapter.getCount()-1); 
     tab.select(); 
    } 
    // 
    public void delTab(View v){ 
     int index = tabLayout.getSelectedTabPosition(); 
     adapter.removeFragment(index); 
    } 
    // 
    class ViewPagerAdapter extends FragmentStatePagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 
     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 
     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 
     // 
     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
      notifyDataSetChanged(); 
     } 
     // 
     public void removeFragment(int position){ 
      mFragmentTitleList.remove(position); 
      mFragmentList.remove(position); 
      notifyDataSetChanged(); 
     } 
     @Override 
     public int getItemPosition(Object object) { 
      return PagerAdapter.POSITION_NONE; 
     } 
     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

enter image description here

/탭을 제거합니다. 그것은 완벽하게 작동하지만 나는 탭 rtl과 탭 1을 오른쪽에 놓는 방법을 안다.

+1

작동하지 않을 수도 있습니다. http://stackoverflow.com/questions/18781944/how-to-make-my-viewpager-swipe-from-right-to-left –

+0

일부 코드보기 –

+0

@AbAppletic 이것은 내 코드입니다. – RedFlow

답변

2

많은 트릭이 문제를 처리 할 수 ​​있습니다 만 제목의 순서를 반대로하고 문제가 해결 될 것입니다 조각/활동의 첫 번째로드에서 viewPager.setCurrentItem(adapter.size()-1)를 호출하여 RTL 언어를 지원하려는

합니다.

귀하의 FragmentAdapter는 다음과 같이해야한다 :

public class PagerAdapter extends FragmentPagerAdapter { 

     private static final int POSITION_HOME = 4; //first item from right 
     private static final int POSITION_CATEGORIES = 3; 

     public PagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case POSITION_HOME: 
        return HomeFragment.newInstance(); 
       case POSITION_CATEGORIES: 
        return CategoryFragment.newInstance(); 
       //other fragment 
      } 
     } 

     @Override 
     public int getCount() { 
      return 4; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
       case POSITION_HOME: 

        return "HOME"; 
       case POSITION_CATEGORIES: 
        return "CATEGORY"; 
       //other title 
      } 
     } 
    } 

그러나 런타임 이전 방식에서 응용 프로그램의 소재지를 변경하는 경우 목에 통증이있다.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){ 
      getWindows().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); 
     } 

또는

변경 로케일과 다시 활동 : 그래서 더 나은 옵션은 다음 코드 앱이 변화 레이아웃 방향은

Locale.setDefault(new Locale("fa")); 

편집 : 당신이 언급으로 당신이 dynamic FragmentPager을 필요로하므로 같은 로직을 FragmentPager에 적용 할 수 있습니다 (조금 수정).

+0

답변 해 주셔서 감사합니다. 오른쪽에 첫 번째 항목을 배치하고 첫 번째의 왼쪽에서 다음 항목을 수행합니다. 추가로 런타임에 추가하는 탭. – RedFlow

+0

@RedFlow 업데이트 내 대답;) – Amir