【问题标题】:Setting ImageView size programmatically depending on resolution根据分辨率以编程方式设置 ImageView 大小
【发布时间】:2014-07-09 20:17:02
【问题描述】:

我有一个ImageView,我想以编程方式设置它的大小。所以我没有选择将不同大小的图像放在各自的drawable文件夹中。

基本上,我想根据屏幕分辨率设置LayoutParams,而不是我在下面所做的事情。如果设备是ldpimdpi,则100,100...如果是hdpi,则150,150等。我该如何实现?

ImageVIew imageView = new ImageView(this);
imageView.setLayoutParams(new ViewGroup.LayoutParams(100, 100));
layout.add(imageView);

【问题讨论】:

    标签: android imageview screen-resolution layoutparams


    【解决方案1】:

    你可以使用

    ImageVIew imageView = new ImageView(this);
    int size = getImageSize();
    imageView.setLayoutParams(new ViewGroup.LayoutParams(size , size ));
    layout.add(imageView);
    

    你的getImageSize函数将是

    private int getImageSize(){
             int density= getResources().getDisplayMetrics().densityDpi;
             int size =100; 
             switch(density)
             {
             case DisplayMetrics.DENSITY_LOW:
                 size = 100;
                 break;
             case DisplayMetrics.DENSITY_MEDIUM:
                 size = 100;
                 break;
             case DisplayMetrics.DENSITY_HIGH:
                 size = 150;
                 break;
             }
    
             return size;
           } 
    

    其中getImageSize根据不同的密度返回不同的大小。

    【讨论】:

      【解决方案2】:

      首先得到screen width,然后乘以你想要的。我乘以0,2

      DisplayMetrics displaymetrics = new DisplayMetrics();
                         getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
                         int screen_width = displaymetrics.widthPixels;
                         int icon_width = screen_width * 2 / 10;
      

      然后

      ImageVIew imageView = new ImageView(this);
      imageView.setLayoutParams(new ViewGroup.LayoutParams(icon_width, icon_width));
      layout.add(imageView);
      

      【讨论】:

        【解决方案3】:

        一旦我用过这个:

         int density= getResources().getDisplayMetrics().densityDpi;
        
        switch(density)
        {
        case DisplayMetrics.DENSITY_LOW:
        Toast.makeText(context, "LDPI", Toast.LENGTH_SHORT).show();
        break;
        case DisplayMetrics.DENSITY_MEDIUM:
         Toast.makeText(context, "MDPI", Toast.LENGTH_SHORT).show();
        break;
        case DisplayMetrics.DENSITY_HIGH:
        Toast.makeText(context, "HDPI", Toast.LENGTH_SHORT).show();
        break;
        case DisplayMetrics.DENSITY_XHIGH:
         Toast.makeText(context, "XHDPI", Toast.LENGTH_SHORT).show();
        break;
        

        }

        【讨论】:

          【解决方案4】:

          使用DisplayMetrics 获取设备 dpi 值(以像素为单位)-

          DisplayMetrics dm = new DisplayMetrics();
          
          getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
          
          // Display device dpi value of Y in pixels
          int screenDPIy = (int)dm.ydpi;
          
          if (screenDPIy <= 180) 
          {           
              ImageVIew imageView = new ImageView(this);
              imageView.setLayoutParams(new ViewGroup.LayoutParams(100, 100));
              layout.add(imageView);
          }
          else
          {
              ImageVIew imageView = new ImageView(this);
              imageView.setLayoutParams(new ViewGroup.LayoutParams(150, 150));
              layout.add(imageView);
          
          }
          

          【讨论】:

            【解决方案5】:

            要了解设备的密度,您可以使用:

            DisplayMetrics metrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(metrics);
            switch(metrics.densityDpi){
                 case DisplayMetrics.DENSITY_LOW:
                            break;
                 case DisplayMetrics.DENSITY_MEDIUM:
                             break;
                 case DisplayMetrics.DENSITY_HIGH:
                             break;
            }
            

            【讨论】:

              【解决方案6】:

              使用与密度无关的像素。使用此处的策略以编程方式工作:Converting pixels to dp

              ImageView imageView = new ImageView(this);
              int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
              int height= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
              imageView.setLayoutParams(new ViewGroup.LayoutParams(width, height));
              layout.add(imageView);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-06-18
                • 1970-01-01
                相关资源
                最近更新 更多