2013-06-29 5 views
15

pI Я работаю с линейным расположением и хочу установить максимальную высоту представления. В «обычных» обстоятельствах я хочу, чтобы представление использовало «wrap_content». Однако иногда обстоятельства могут подтолкнуть макет к нежелательному размеру. Когда это произойдет, я хочу ограничить высоту до 300dp.Какая единица измерения использует LayoutParams?

Я установил размер представления с использованием следующего, когда список в макете превышает 4 элементов списка:

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); 
} 

обзорных в documentation оставляет меня без подсказки, как к единице измерения, которая применяется , Каковы единицы измерения в этой ситуации (dp, sp, px, ...)?

Выполнение тестов, даже установив значение 100, имеет список, превышающий желаемую высоту.

Пожалуйста посоветуйте

ответ

17

Согласно документации вы связаны: пикселей. См this function

ширину, либо MATCH_PARENT, WRAP_CONTENT или фиксированный размер в пикселях

Даже если функция вы используете не имеет каких-либо конкретных документов, то подразумевается, что это использует ту же документацию, что и функция с большинством параметров. Сама функция, вероятно, выглядит следующим образом:

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

т.е. это просто вызов версии с 3-параметрической со значением по умолчанию.

+0

Таким образом, в чтении документации методы общественных LinearLayout.LayoutParams (ширина INT, INT высота) общественного LinearLayout.LayoutParams (int width, int height, float weight) используйте то же описание: Создает новый набор параметров макета с указанной шириной, высотой и весом. Параметры ширина \t ширина, либо MATCH_PARENT, WRAP_CONTENT или фиксированный размер в пикселях высота \t высота, либо MATCH_PARENT, WRAP_CONTENT или фиксированный размер в пикселях вес \t больше веса –

+0

Да. Функция LinearLayout.LayoutParams (int width, int height) представляет собой перегрузку трехпараметрической версии, которая, вероятно, выглядит примерно так: (EDIT: добавление к сообщению, потому что комментарии не форматируют код) –

1

Как сказал Дэвид, установка LayoutParams через код устанавливается в пикселях. Вы можете использовать код в this thread, чтобы преобразовать нужный dp в px.

0

Вот полный класс с импортом, если вашим возникли проблемы - @ 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

я не понимаю –

+0

He необходимо использовать 300dp для его высоты. используйте эту функцию для преобразования в пиксели ... – rahaprogramming

+0

int 300dpInPixels = convertDpToPixel (300); – rahaprogramming

Смежные вопросы