Android - getHeight() and getWidth()

11,488

to get the size of the screen you can try:

 DisplayMetrics metrics = this.getResources().getDisplayMetrics();
  int width = metrics.widthPixels;
  int height = metrics.heightPixels;

Look this: Get screen dimensions in pixels

Share:
11,488
Allan Macmillan
Author by

Allan Macmillan

Computing Science and Mathematics graduate from The University Of Glasgow. Experience using Solr, Nutch, Java, Android, Hadoop, C and more

Updated on June 04, 2022

Comments

  • Allan Macmillan
    Allan Macmillan almost 2 years

    I am dynamically creating some ImageViews inside a relativeLayout but I need the size to vary depending on the height and width of the screen. At the point where I set the height the views and layouts havent been created which means that the getHeight() and getWidth() are returning 0. I have looked at other threads on StackOverflow but none seem specific enough to my problem.

    I am doing all this in a Fragment and would appreciate any guidance on how to solve this. Her is a small snippet of my code.

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){
        View v = inflater.inflate(R.layout.fragment_hello_moon, parent, false);
    
        RelativeLayout rl = (RelativeLayout) v.findViewById(R.id.l1);
        tl.setBackgroundColor(Color.RED);
    
        ArrayList<ImageView> imgViews = new ArrayList<ImageView>();
    
        //Cant get height or width of parent as hasnt been created yet
        int numberOfBells = 16;
        int height = rl.getHeight() / numberOfBells;
        int width = rl.getWidth() / 2;
    
        final ImageView imageTopL = new ImageView(getActivity());
    
        if (true){
            imageTopL.setId(1);
            imageTopL.setImageResource(R.drawable.bell_dl_256);
    
            RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
    
            params1.addRule(RelativeLayout.ALIGN_PARENT_TOP);
            params1.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
            params1.setMargins(50,10,0,10);
    
            imageTopL.setLayoutParams(params1);
    
            //Need the size to vary depending on the height/width
            imageTopL.getLayoutParams().height = height;
            imageTopL.getLayoutParams().width = width;
    
            imageTopL.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    imageTopL.setImageResource(R.drawable.bell_ul_256);
                }
            });
    
            imgViews.add(imageTopL);
        }
      for(ImageView i : imgViews){
            rl.addView(i);
        }
    
        return v;
    }