web-dev-qa-db-ja.com

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

}
7
user2853834

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);
.
.
31
rupps
  ViewGroup.LayoutParams params = ListView.getLayoutParams();
        params.height = (int) (50 * customsDebts.size() * (getResources().getDisplayMetrics().density));
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        ListView.setLayoutParams(params);
2
Samet ÖZTOPRAK

dimensで定義されたdp値を使用する必要があると思います getDimensionPixelSize 。カスタムビューでは、Kotlinの実装は次のようになります。

val layoutParams = layoutParams
val width = context.resources.getDimensionPixelSize(R.dimen.width_in_dp)
layoutParams.width = width
1
Tom Howard