Monday, August 22, 2011

Android programmatic density independent pixels

I've been doing a bunch of Android programming lately, working on porting the iBridalGown iOS app to Android, so I've been using a lot of "dip" (density independent pixels) measuring in my layouts. For example, in a TextView, I might specify something like this in XML:

<TextView
      android:id="@+id/headertext"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:minHeight="48dip"
      android:textSize="24dip"
      android:text="My Dresses"
/>

But what if, within the Activity code, I want to change one of these measurements? There are no Java methods in the Android SDK that accept density independent pixels!

Well, here's how. Just multiply the size in pixels by a scale factor defined in the context's resources, like so:

float scale = context.getResources().getDisplayMetrics().density;
float size = sizeInPixels * scale;

And there's that. I hope it helps :) Please join the conversation with a comment.

2 comments:

  1. This comment has been removed by a blog administrator.

    ReplyDelete
  2. This comment has been removed by a blog administrator.

    ReplyDelete