{blog}


  • YouTube Tutorials

    My all time favorite tutorial maker Derek Banas has an extensive catalogue of programming tutorials on his Youtube channel. I’ve used those a lot, especially in my studies. His series on design patterns are golden!

    I really like the tempo in them. Very hands-on and very organised.

    He has a bunch of videos that covers entire techniques in a single video. Perfect if you’re a somewhat experienced developer that need to get up to speed in something.

    Here’s and example:


  • Debug link shared on facebook

    Sometimes when you share a link to you site on Facebook it uses old thumbnails or the link image. There’s a ton of useful info about your site here:
    https://developers.facebook.com/tools/debug


  • (Android) Find physical screen size programatically

    This method will find out if screen is a tablet size.

    You could of course make this even more corner case-compliant by getting the units dpi (dot per inch) and use the Pythagorean theorem to find the actual inch size of the diagonal. But this will probably suffice for most case.

    [java]
    private boolean isLargeScreen() {

    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    // Get the density of the screen (dp)
    float density = metrics.density;

    // Find out if the smallest of x/y is largeer than 600 (7" tablet. For 10" use 720)
    return Math.min(metrics.widthPixels / density, metrics.heightPixels / density) > 600;
    }
    [/java]


  • (Android) Custom view orientation change – restore state.

    Here’s one pretty simple way to get your custom view to restore its current state after an orientation change:
    You can of course put any values in there, for example if you need to restore fields.

    (quickly plotted code. Haven’t run it, but it should work)

    [java]
    @Override
    protected Parcelable onSaveInstanceState() {
    Bundle bundle = new Bundle();
    bundle.putParcelable("instanceState", super.onSaveInstanceState());
    bundle.putString("myString", myEditText.getText().toString());
    return bundle;
    }

    @Override
    protected void onRestoreInstanceState(Parcelable state) {
    if (state instanceof Bundle) {
    Bundle bundle = (Bundle) state;
    myEditText.setText(bundle.getString("myString"));
    state = bundle.getParcelable("instanceState");
    }
    super.onRestoreInstanceState(state);
    }
    [/java]


  • (Android) Change background of a bitmap

    1. Create a new bitmap, with the size and config of the bitmap you wish to change.
    2. Create a Canvas and prepare it to paint to the new bitmap.
    3. Paint the new bitmap with your color using the canvas object.
    4. Draw the old bitmap to the new bitmap through the canvas object.
    5. Do what you want with the new bitmap

    [java]
    // Create new bitmap based on the size and config of the old
    Bitmap newBitmap = Bitmap.createBitmap(oldBitmap.getWidth(), oldBitmap.getHeight(), oldBitmap.getConfig());

    // Instantiate a canvas and prepare it to paint to the new bitmap
    Canvas canvas = new Canvas(newBitmap);

    // Paint it white (or whatever color you want)
    canvas.drawColor(Color.WHITE);

    // Draw the old bitmap ontop of the new white one
    canvas.drawBitmap(oldBitmap, 0, 0, null);
    [/java]


  • (Android) Convert Density-independent Pixels to Pixels (dp 2 px)

     

    A simple function to convert dp into pixels. Use when you have to pass pixels to a method and want to keep everything to scale.

    [java]

    private int dp2px(int dp) {
    float scale = getResources().getDisplayMetrics().density;
    int pixels = (int) (dp * scale + 0.5f);
    return pixels;
    }

    [/java]

    From Android Developer Center :

    px
    Pixels – Corresponds to actual pixels on the screen. This unit of measure is not recommended because the actual representation can vary across devices; each devices may have a different number of pixels per inch and may have more or fewer total pixels available on the screen.

    dp
    Density-independent Pixels – An abstract unit that is based on the physical density of the screen. These units are relative to a 160 dpi (dots per inch) screen, on which 1dp is roughly equal to 1px. When running on a higher density screen, the number of pixels used to draw 1dp is scaled up by a factor appropriate for the screen’s dpi. Likewise, when on a lower density screen, the number of pixels used for 1dp is scaled down. The ratio of dp-to-pixel will change with the screen density, but not necessarily in direct proportion. Using dp units (instead of px units) is a simple solution to making the view dimensions in your layout resize properly for different screen densities. In other words, it provides consistency for the real-world sizes of your UI elements across different devices.

     

     


  • (Android) NumberPicker with leading zero

    Set your number picker to show leading zeros by applying a formatter to it.
    Example is using an anonymous instance, but of course it doesn’t have to.

    [java]
    myNumberPicker.setFormatter(new NumberPicker.Formatter() {
    @Override
    public String format(int value) {
    return String.format("%02d", value);
    }
    });

    [/java]

    For %02d this goes:

    • 0 for filling with zeros
    • 2 for length of 2

  • (Android) Set focus to dialog programmatically

    To get the keyboard to pop up after creating a dialog:

    [java]dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    dialog.show();[/java]


  • (Java) Convert milliseconds to minutes and seconds (mm:ss)

    For a nice string representation, using the TimeUnit lib:
    [java]
    String.format("%02d:%02d",
    TimeUnit.MILLISECONDS.toMinutes(milliSeconds),
    TimeUnit.MILLISECONDS.toSeconds(milliSeconds) –
    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliSeconds)));

    [/java]
    or simply do the math:
    [java]
    int minutes = (int) (milliSeconds/ 1000) / 60;
    int seconds = (int) (milliSeconds/ 1000) % 60;
    [/java]
    and back to miliseconds again:
    [java]
    long milliSeconds= ((minutes * 60) + seconds) * 1000;
    [/java]


  • (Android) Prevent config change on orientation change

    Add to activity in manifest:
    [xml]android:configChanges="keyboardHidden|orientation|screenSize"[/xml]