2016-09-07 3 views
0

표시되지 :안드로이드 TabLayout이 내가 내 tabLayout을 설정하는 방법입니다 제대로

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

    LinearLayout layout=new LinearLayout(this); 

    layout.setLayoutParams(new LinearLayoutCompat.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 
    layout.setOrientation(LinearLayout.VERTICAL); 

    setContentView(layout); 

    AppBarLayout appBarLayout= (AppBarLayout) getLayoutInflater().inflate(R.layout.toolbar_layout,null); 
    appBarLayout.setLayoutParams(new AppBarLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
    layout.addView(appBarLayout); 
    Toolbar toolbar = new Toolbar(this); 
    appBarLayout.addView(toolbar); 
    toolbar.getLayoutParams().height=150; 
    setSupportActionBar(toolbar); 

    TabLayout tabLayout = new TabLayout(this); 
    tabLayout.setLayoutParams(new AppBarLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,100)); 
    appBarLayout.addView(tabLayout); 

    tabLayout.addTab(tabLayout.newTab().setText("Tab 1")); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab 2")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    tabLayout.setTabMode(TabLayout.MODE_FIXED); 

    final ViewPager viewPager = new ViewPager(this); 
    viewPager.setLayoutParams(new LinearLayoutCompat.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 
    viewPager.setId(24234); 
    layout.addView(viewPager); 
} 

문제 :

내가 탭이 중앙에 유지하지 않고 전체 폭을 채우기 위해 싶습니다.

내가 원하는 무엇이다, 세로 모드에서이 얻을 :

Portrait mode

하지만 가로 모드에서 점점 :

어떤 도움에 감사드립니다

Landscape Mode

, 감사합니다.

UPDATE : 탭이 두 개 이상이 될 경우

상황 변화! 이 경우 두 모드에서 동일한 동작을 얻습니다! 이상한 ...

답변

0

해결 같습니다

public class My_TabLayout extends TabLayout { 

public My_TabLayout(Context context) { 

    super(context); 

    initTabs(); 
} 

public My_TabLayout(Context context, AttributeSet attrs) { 

    super(context, attrs); 
    initTabs(); 
} 

public My_TabLayout(Context context, AttributeSet attrs, int defStyleAttr) { 

    super(context, attrs, defStyleAttr); 
    initTabs(); 
} 

private void initTabs(){ 


    Field field; 

    try { 

     int tabs=getTabCount(); 
     if (tabs==0) tabs=1; 
     field = TabLayout.class.getDeclaredField("mRequestedTabMinWidth"); 
     field.setAccessible(true); 

     field.set(this, getWidth()/tabs); 

     field = TabLayout.class.getDeclaredField("mRequestedTabMaxWidth"); 
     field.setAccessible(true); 
     field.set(this, getWidth()/tabs); 
    } 
    catch (NoSuchFieldException e) { 

     e.printStackTrace(); 
    } 
    catch (IllegalAccessException e) { 

     e.printStackTrace(); 
    } 
} 
} 
: 나를 위해

솔루션 클래스 TabLayout의 두 개의 필드 (개인)를 설정하고, 이것은 사용자 정의 TabLayout와, 반사에 의해 달성되었다

with initTabs() 메소드 내 문제가 해결되었습니다 (두 개의 탭으로 만 발생).

자세한 정보 : Solution