2013-09-05 2 views
3

작업 표시 줄 탭 레이아웃에 문제가 있습니다. 어떤 경우에는 적어도 10 개의 예제를 통해 트롤링 한 후 모두 10 개의 액션 바를 중앙에 배치했기 때문에 장치의 전폭에 걸쳐 탭이 늘어나지 않았습니다. 아마도 그것은 확실하지 않은 태블릿에서의 테스트와 관련이있을 것입니다. 다음은 내 코드뿐만 아니라 문제의 이미지입니다.Android ActionBar 탭 레이아웃 너비가 충분하지 않음

감사합니다.

컨테이너 :

public class ContainerActivity extends Activity { 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ActionBar actionBar = getActionBar(); 
    actionBar.setDisplayShowHomeEnabled(false); 
    actionBar.setDisplayShowTitleEnabled(false); 
    actionBar.setDisplayUseLogoEnabled(false); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    Tab tab = actionBar.newTab() 
         .setText("Mat") 
         .setTabListener(new TabListener<MatchesFragment>(
           this, "Match", MatchesFragment.class)); 
    actionBar.addTab(tab); 
    ... 

컨테이너의 XML :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

조각 :

public class MatchesFragment extends Fragment { 
public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
    View myFragmentView = inflater.inflate(R.layout.activity_matches,  container, false); 
    return myFragmentView; 
} 

조각의 XML :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/tab3" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_gravity="fill_horizontal" 
android:orientation="vertical" 
android:gravity="center"> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:text="@string/report_tab" /> 

</LinearLayout> 

답변

0

글로벌 레이아웃 리스너 사용해보십시오 :

선언 :

int requestLayoutCounter = 0; 

내부 onCreateView (rootView의 주요보기이다) :

rootView.getViewTreeObserver().addOnGlobalLayoutListener(new MyGlobalListenerClass()); 

이 컨테이너에 어떤 자료 :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/container" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

다음 조각 내부의 rootView의 OnGlobalLayoutListener을 선언

private class MyGlobalListenerClass implements ViewTreeObserver.OnGlobalLayoutListener { 
    @Override 
    public void onGlobalLayout() { 
     View v = (View) rootView.findViewById(R.id.container); 

     Display display = this.getActivity().getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     int[] dimension = new int[2]; 
     dimension[0] = size.x; //width of the screen 
     dimension[1] = size.y; //height 

     v.getLayoutParams().width = (displaySize[0]); 
     if (requestLayoutCounter < 25){ //weird code but works for me on different devices 
      topLayout.requestLayout(); 
      requestLayoutCounter++; 
     } 
    } 
} 

배치 후 컨테이너의 너비를 변경합니다이 코드가 팽창하거나 내용이나 방향을 변경 한 후, 내가 그것을 알고하자되었습니다 당신을 위해 일했습니다