2013-03-28 14 views
7

Dodaję View (button) programowo w Linearlayout.LinearLayout jest układany przez XML w Fragment.Kiedy powinienem uzyskać Width Szerokość w Fragmentie

chcę uzyskać szerokość przycisk, ale zawsze zwraca 0.

google ten problem,

getWidth praca tylko onWindowFocusChanged.

public void onWindowFocusChanged(boolean hasFocus) { } 

ale Fragment nie ma tej metody.

Jak uzyskać szerokość widoku w Fragment?

Odpowiedz

8

Sprawdź post GlobalLayoutListener. Możesz użyć detektora na swoim Button w onCreateView(), tak jak użyłeś onWindowFocusChanged. Jest także bardziej niezawodny niż onWindowFocusChanged().

Wypróbuj jak poniżej:

final View myView = profileContainer.findViewById(R.id.sub_page_padding); 
    ViewTreeObserver vto = profilePadding.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     Log.d("TEST", "Height = " + myView.getHeight() + " Width = " + myView.getWidth()); 
     ViewTreeObserver obs = profilePadding.getViewTreeObserver(); 
     obs.removeGlobalOnLayoutListener(this); 
    } 
    }); 
5

bym miał podobny problem i rozwiązać go we fragmencie zwrotnej onViewCreated() tak:

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    view.post(new Runnable() { 
     @Override 
     public void run() { 
      // do operations or methods involved 
      // View.getWidth(); or View.getHeight(); 
      // here 
     } 
    }); 
} 

run() działa po renderowaniu wszystkich wyświetleń ...

Powiązane problemy