2017-01-15 2 views
2

Я попытался установить высоту/ширину вручную, но это не сработало. Затем реализованы Layoutparams. Но размер показывает небольшой и не получает требуемого значения dp.Как установить высоту/ширину Layoutparams в значение dp?

XML

<Button 
    android:id="@+id/itemButton" 
    android:layout_width="88dp" 
    android:layout_height="88dp" 
    android:layout_marginRight="5dp" 
    android:layout_marginBottom="5dp" 
    android:background="#5e5789" 
    android:gravity="bottom" 
    android:padding="10dp" 
    android:text="" 
    android:textColor="#FFF" 
    android:textSize="10sp" /> 

Конструктор

public Item (int id, String name, String backgroundColor, String textColor, int width, int height){ 
    this.id = id; 
    this.name = name; 
    this.backgroundColor = backgroundColor; 
    this.textColor = textColor; 
    this.width = width; 
    this.height = height; 

} 

адаптер:

@Override public void onBindViewHolder(final ViewHolder holder, int position) { 
    final Item item = items.get(position); 
    holder.itemView.setTag(item); 
    holder.itemButton.setText(item.getName()); 
    holder.itemButton.setTextColor(Color.parseColor(item.getTextColor())); 
    holder.itemButton.setBackgroundColor(Color.parseColor(item.getBackgroundColor())); 
    ViewGroup.LayoutParams params = holder.itemButton.getLayoutParams(); 
    params.width = item.getWidth(); 
    params.height = item.getHeight(); 
    holder.itemButton.setLayoutParams(params); 

} 

ответ

5

При указании значения программных ally в LayoutParams, эти значения должны быть пикселями.

Для преобразования между пикселями и dp необходимо умножить на коэффициент плотности тока. Это значение находится в DisplayMetrics, что вы можете получить доступ из Context:

float pixels = dp * context.getResources().getDisplayMetrics().density; 

Так что в вашем случае вы можете сделать:

. 
. 
float factor = holder.itemView.getContext().getResources().getDisplayMetrics().density; 
params.width = (int)(item.getWidth() * factor); 
params.height = (int)(item.getHeight() * factor); 
. 
. 
+1

Ваше объяснение очень ясно и точно! Спасибо чувак! Это сработало! –

0
ViewGroup.LayoutParams params = ListView.getLayoutParams(); 
     params.height = (int) (50 * customsDebts.size() * (getResources().getDisplayMetrics().density)); 
     params.width = ViewGroup.LayoutParams.MATCH_PARENT; 
     ListView.setLayoutParams(params); 
Смежные вопросы