What unit of measure does LayoutParams use?

16,003

Solution 1

According to the documentation you linked: pixels. See this function

the width, either MATCH_PARENT, WRAP_CONTENT or a fixed size in pixels

Even though the function you're using doesn't have any explicit documentation, it is implied that it uses the same documentation as the function with the most parameters. The function itself probably looks like:

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

i.e. it's simply calling the 3-parameter version with a default value.

Solution 2

Here's the full class with imports if your having trouble - @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);
    }
}

Solution 3

As David said, setting LayoutParams via code is set in pixels. You can use the code in this thread to convert the desired dp to px.

Share:
16,003

Related videos on Youtube

Roy Hinkley
Author by

Roy Hinkley

Updated on June 04, 2022

Comments

  • Roy Hinkley
    Roy Hinkley almost 2 years

    pI am working with a linear layout and want to set the maximum height of the view. Under "normal" circumstances, I want the view to use "wrap_content." However, occasionally the circumstances may push the layout to an undesirable size. When this happens, I want to limit the height to a maximum 300dp.

    I have set the size of the view using the following when the list in the layout exceeds 4 list items:

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

    Reviewing the documentation leaves me with no clue as to the unit of measure that is applied. What are the units of measure in this situation (dp, sp, px, ...)?

    Running tests, even setting the value to 100 has the list exceeding desired height.

    Please advise

  • Roy Hinkley
    Roy Hinkley almost 11 years
    So in reading the documentation the methods public LinearLayout.LayoutParams (int width, int height) public LinearLayout.LayoutParams (int width, int height, float weight) use the same description: Creates a new set of layout parameters with the specified width, height and weight. Parameters width the width, either MATCH_PARENT, WRAP_CONTENT or a fixed size in pixels height the height, either MATCH_PARENT, WRAP_CONTENT or a fixed size in pixels weight the weight
  • J David Smith
    J David Smith almost 11 years
    Yup. The LinearLayout.LayoutParams(int width, int height) function is an overload of the 3-parameter version which likely looks something like this: (EDIT: adding to post because comments don't format code)
  • rahaprogramming
    rahaprogramming over 6 years
    int 300dpInPixels = convertDpToPixel(300);