2017-01-15 6 views
2

ボタンで高さ/幅を手動で設定しようとしましたが、機能しませんでした。次に、Layoutparamsを実装しました。しかし、サイズは小さく、必要なdp値を得られません。レイアウトパラメータの高さ/幅を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

あなたがプログラム的な値を指定しますLayoutParamsでは、これらの値はピクセルであると予想されます。

ピクセルとdpを変換するには、現在の密度係数を掛けなければなりません。この値は、あなたがContextからアクセスできることを、DisplayMetricsである:あなたが行うことができ、あなたの場合はそう

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); 
関連する問題