web-dev-qa-db-ja.com

LayoutParamsはどの測定単位を使用しますか?

p線形レイアウトで作業していて、ビューの最大高さを設定したいと思います。 「通常の」状況では、ビューで「wrap_content」を使用する必要があります。ただし、状況によっては、レイアウトが望ましくないサイズになる場合があります。その際、高さを最大300dpに制限したいと思います。

レイアウト内のリストが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に設定しても、リストが目的の高さを超えています。

お知らせ下さい

22
Roy Hinkley

リンクしたドキュメントによると:ピクセル。 この関数 を参照してください

幅、MATCH_PARENT、WRAP_CONTENT、またはピクセル単位の固定サイズ

使用している関数には明示的なドキュメントがありませんが、ほとんどのパラメーターを持つ関数と同じドキュメントを使用していることを意味します。関数自体はおそらく次のようになります。

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

つまり、デフォルト値で3パラメータバージョンを呼び出すだけです。

22
J David Smith

問題が発生した場合のインポートを含む完全なクラスは次のとおりです[email protected]

//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);
    }
}
3
rahaprogramming

Davidが言ったように、コードを介したLayoutParamsの設定はピクセル単位で設定されます。 このスレッド のコードを使用して、目的のdpをpxに変換できます。

1
dors