2010-10-15 11 views
5

Pracuję nad układem w Androidzie XML, w którym chciałbym ustawić wysokość przycisków, aby dopasować szerokość do konfiguracji, aby wypełnić rodzic. Oczywiście ta liczba zmieni się w zależności od rozmiaru ekranu, więc nie mogę użyć ustawionego rozmiaru piksela. Czy ktoś może mi pomóc w uzyskaniu szerokości przycisku w oparciu o rozmiar ekranu, a następnie przekazanie go do ustawienia wysokości?Android: Ustawianie wysokości przycisku w XML w oparciu o jego szerokość

Dziękuję, Josh

Odpowiedz

-1

Zamiast rozmiar piksela przez px, wspominając dip (to urządzenie niezależne pikseli), dip odbędzie rozmiar piksela w zależności od urządzenia wielkości ekranu niezależnie.

na przykład: Android: TEXTSIZE = "12dip"

Można użyć kąpieli lub dp.

Ciesz się !!

3

Kiedyś miałem podobny problem i nie znalazłem rozwiązania, które działa tylko z XML. Musisz napisać własną klasę przycisków i nadpisać metodę [1].

przykład:

/** 
* @see android.view.View#measure(int, int) 
*/ 
@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); 
} 

private int width; // saves the meassured width 


/** 
* Determines the width of this view 
* 
* @param measureSpec 
*   A measureSpec packed into an int 
* @return The width of the view, honoring constraints from measureSpec 
*/ 
private int measureWidth(int measureSpec) { 
    int result = 30; 
    int specMode = MeasureSpec.getMode(measureSpec); 
    int specSize = MeasureSpec.getSize(measureSpec); 

    if (specMode == MeasureSpec.EXACTLY) { 
     // We were told how big to be 
     result = specSize; 
    } else { 
     result =1123; // meassure your with here somehow 
     if (specMode == MeasureSpec.AT_MOST) { 
      // Respect AT_MOST value if that was what is called for by measureSpec 
      result = Math.min(result, specSize); 
     } 
    } 
      width = result; 
    return result; 
} 

/** 
* Determines the height of this view 
* 
* @param measureSpec 
*   A measureSpec packed into an int 
* @return The height of the view, honoring constraints from measureSpec 
*/ 
private int measureHeight(int measureSpec) { 
    int result = 0; 
    int specMode = MeasureSpec.getMode(measureSpec); 
    int specSize = MeasureSpec.getSize(measureSpec); 

    if (specMode == MeasureSpec.EXACTLY) { 
     // We were told how big to be 
     result = specSize; 
    } else { 
     result = width; 
     if (specMode == MeasureSpec.AT_MOST) { 
      // Respect AT_MOST value if that was what is called for by measureSpec 
      result = Math.min(result, specSize); 
     } 
    } 

    return result; 
} 

[1]: http://developer.android.com/reference/android/view/View.html#onMeasure(int int)

Powiązane problemy