简体   繁体   中英

resizing images to fit multiple screen sizes

I have an app, that scales my images for multiple screen sizes on android phones.

The layout is created programatically (no xml), I just define the size of the image, when I save it in my photo editor, for example 60x60.

It seems to scale up as much as possible on a tablet, but could be bigger. I tried changing the size of the image to 100x100, this fills the tablet screen a little more, but now it does not scale down that image on smaller devices... very frustrated.

Here is my code:

Android Manifest: enabling resizable attribute and supported screens

      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.anndconsulting.numbertouch"
      android:versionCode="1"
      android:versionName="1.0"
      android:installLocation="auto"  
      android:resizeable="true"
      >  
   <supports-screens
      android:smallScreens="true"
      android:normalScreens="true"
      android:largeScreens="true"
      android:anyDensity="true"
      />

Game.Java Code:

    //create a layout
    ll = new LinearLayout(this);
    ll.setOrientation(LinearLayout.VERTICAL);
    ll.setBackgroundResource(R.drawable.background);
    ll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
               LayoutParams.FILL_PARENT));

  //create another 5 linear layouts which will host 5 buttons horizontally
     linearLayout1 = new LinearLayout(this);
     linearLayout1.setOrientation(LinearLayout.HORIZONTAL);
     linearLayout1.setGravity(Gravity.CENTER);

     linearLayout2 = new LinearLayout(this);
     linearLayout2.setOrientation(LinearLayout.HORIZONTAL);
     linearLayout2.setGravity(Gravity.CENTER);

     linearLayout3 = new LinearLayout(this);
     linearLayout3.setOrientation(LinearLayout.HORIZONTAL);
     linearLayout3.setGravity(Gravity.CENTER);

     linearLayout4 = new LinearLayout(this);
     linearLayout4.setOrientation(LinearLayout.HORIZONTAL);
     linearLayout4.setGravity(Gravity.CENTER);

     linearLayout5 = new LinearLayout(this);
     linearLayout5.setOrientation(LinearLayout.HORIZONTAL);
     linearLayout5.setGravity(Gravity.CENTER);

    Then i create a 5x5 array of buttons (which I saved as 100x100) in the drawable      folder

    for (int i = 0; i < 25; i++) {
            buttonsa.add(createButton(i));
        }
        Collections.shuffle(buttonsa);

        //add first 5 buttons to first layout
            for (int i=0;i<5;i++) {
            linearLayout1.addView(buttonsa.get(i));


        }
      //add remaining 5 to second layout
        for (int i=5;i<10;i++){
            linearLayout2.addView(buttonsa.get(i));

        }
        for (int i=10;i<15;i++){
            linearLayout3.addView(buttonsa.get(i));

        }
        for (int i=15;i<20;i++){
            linearLayout4.addView(buttonsa.get(i));

        }
        for (int i=20;i<25;i++){
            linearLayout5.addView(buttonsa.get(i));

        }
    ll.addView(linearLayout1);
        ll.addView(linearLayout2);
        ll.addView(linearLayout3);
        ll.addView(linearLayout4);
        ll.addView(linearLayout5);

my create button function below:

private Button createButton(final int i) {
final Button b = new Button(this);
int mode = mGameSettings.getInt(GAME_PREFERENCES_GAME_MODE, 0);
if (mode == 1) {

    b.setText(" "+letter[i]);
    b.setWidth(20); <-- this is where I thought I could change but does not 
    b.setHeight(20); <-- same here, just fills the small screen with big image 
                             and cuts of the rest.
    }
    else {
    b.setText((i+1) +" "); }

Best way to have the image supported in multiple devices with multiple screen sizes and densities is to place your 60*60 image in the drawable folder and 100*100 image in the drawable-large-hdpi or drawable-large-mdpi folder or which ever folder from which your device will pick up the drawable. This way when you run the application in the normal size phone or on any large screen devices. images will be picked up from the respective drawable folders and scale according to the device density.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM