2013-06-29 14 views
15

p Pracuję z układem liniowym i chcę ustawić maksymalną wysokość widoku. W "normalnych" okolicznościach chcę, aby widok używał "wrap_content". Jednak czasami okoliczności mogą spowodować przesunięcie układu do niepożądanego rozmiaru. Kiedy tak się stanie, chcę ograniczyć wysokość do maksymalnie 300p.Jaką jednostkę miary używa LayoutParams?

mam ustawić rozmiar widoku przy użyciu następujących gdy lista w układzie przekroczy 4 Wykaz pozycji:

LinearLayout listLayout = (LinearLayout) dialog.findViewById(R.id.listLayout); 
if(list.size() > 4){ 
    LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 300);       
    listLayout.setLayoutParams(params); 
} 

przeglądając documentation pozostawia mnie bez pojęcia, jednostki miary, która jest stosowana . Jakie są jednostki miary w tej sytuacji (dp, sp, px, ...)?

Przeprowadzanie testów, nawet ustawienie wartości na 100 powoduje, że lista przekracza pożądaną wysokość.

Proszę doradzić

Odpowiedz

17

Według dokumentacji, którą powiązany: pikseli. Zobacz this function

szerokość, albo MATCH_PARENT, WRAP_CONTENT lub stałą wielkość w pikseli

Chociaż funkcja używasz nie ma żadnej wyraźnej dokumentacji, to zakłada się, że to korzysta z tej samej dokumentacji co funkcja o największej liczbie parametrów. Sama funkcja prawdopodobnie wygląda tak:

LinearLayout.LayoutParams(int width, int height) { 
    this(width, height, /*some default value*/); 
} 

znaczy to po prostu dzwoniąc do wersji 3-parametru z wartością domyślną.

+0

Więc w czytaniu dokumentacji metod LinearLayout.LayoutParams publiczne (int szerokość, int wysokość) LinearLayout.LayoutParams publiczne (szerokość int, int, masa float) użyj tego samego opisu: Tworzy nowy zestaw parametrów układu o określonej szerokości, wysokości i wadze. Parametry szerokość \t szerokość, albo MATCH_PARENT, WRAP_CONTENT lub stałym rozmiarze w pikselach wysokość \t wysokość albo MATCH_PARENT, WRAP_CONTENT lub stałym rozmiarze w pikselach masy \t większą masę –

+0

Tak. Funkcja LinearLayout.LayoutParams (int width, int height) jest przeciążeniem wersji 3-parametrowej, która prawdopodobnie wygląda mniej więcej tak: (EDYTOWANIE: dodawanie do postu, ponieważ komentarze nie formatują kodu) –

1

Jak powiedział David, ustawienie opcji LayoutParams za pomocą kodu ustawiono w pikselach. Możesz użyć kodu w this thread, aby przekonwertować żądany dp na piksel.

0

Oto pełna klasa z importu jeśli twój mającego kłopoty - @ Pierre.Vriens

//usage: int 300dpInPixels = util.convertDpToPixel(300); 

import android.content.res.Resources; 
import android.util.DisplayMetrics; 

public class utils { 
    public static int convertDpToPixel(float dp){ 
     DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); 
     float px = dp * (metrics.densityDpi/160f); 
     return Math.round(px); 
    } 
} 
+0

Nie rozumiem tego. –

+0

On musi użyć 300p na swój wzrost. użyj tej funkcji do konwersji na piksele ... – rahaprogramming

+0

int 300dpInPixels = convertDpToPixel (300); – rahaprogramming

Powiązane problemy