diff --git a/app/src/main/java/com/google/reviewit/util/WidgetUtil.java b/app/src/main/java/com/google/reviewit/util/WidgetUtil.java
index df03587..6c2b92e 100644
--- a/app/src/main/java/com/google/reviewit/util/WidgetUtil.java
+++ b/app/src/main/java/com/google/reviewit/util/WidgetUtil.java
@@ -118,6 +118,28 @@
     return (int) context.getResources().getDimension(id);
   }
 
+  public float toDimension(String value, float defaultValue) {
+    if (value == null) {
+      return defaultValue;
+    }
+    try {
+      if (value.endsWith("sp")) {
+        value = value.substring(0, value.length() - 2).trim();
+        return spToPx(Integer.valueOf(value));
+      } else if (value.endsWith("dp")) {
+        value = value.substring(0, value.length() - 2).trim();
+        return dpToPx(Integer.valueOf(value));
+      } else if (value.endsWith("px")) {
+        value = value.substring(0, value.length() - 2).trim();
+        return Integer.valueOf(value);
+      } else {
+        return Integer.valueOf(value);
+      }
+    } catch (NumberFormatException e) {
+      return defaultValue;
+    }
+  }
+
   public void setBackgroundColor(View view, @ColorRes int colorId) {
     view.setBackgroundColor(color(colorId));
   }
diff --git a/app/src/main/java/com/google/reviewit/widget/MaxFontSizeTextView.java b/app/src/main/java/com/google/reviewit/widget/MaxFontSizeTextView.java
index f9a0920..765621f 100644
--- a/app/src/main/java/com/google/reviewit/widget/MaxFontSizeTextView.java
+++ b/app/src/main/java/com/google/reviewit/widget/MaxFontSizeTextView.java
@@ -24,6 +24,7 @@
 import android.widget.TextView;
 
 import com.google.reviewit.R;
+import com.google.reviewit.util.WidgetUtil;
 
 /**
  * TextView that automatically sets the font size as large as possible
@@ -46,13 +47,14 @@
 
   public MaxFontSizeTextView(Context context, AttributeSet attrs) {
     super(context, attrs);
+    WidgetUtil widgetUtil = new WidgetUtil(context);
     TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
         R.styleable.MaxFontSizeTextView, 0, 0);
     maxLineLength = a.getInteger(R.styleable
         .MaxFontSizeTextView_maxLineLength, 0);
-    minTextSize = readAttr(a.getString(
+    minTextSize = widgetUtil.toDimension(a.getString(
         R.styleable.MaxFontSizeTextView_minTextSize), MIN_TEXT_SIZE_DEFAULT);
-    maxTextSize = readAttr(a.getString(
+    maxTextSize = widgetUtil.toDimension(a.getString(
         R.styleable.MaxFontSizeTextView_maxTextSize), MAX_TEXT_SIZE_DEFAULT);
 
     paint = new Paint();
@@ -90,25 +92,6 @@
     }
   }
 
-  private float readAttr(String attr, float defaultValue) {
-    if (attr == null) {
-      return defaultValue;
-    }
-    try {
-      if (attr.endsWith("sp")) {
-        attr = attr.substring(0, attr.length() - 2).trim();
-        return spToPx(Integer.valueOf(attr));
-      } else if (attr.endsWith("px")) {
-        attr = attr.substring(0, attr.length() - 2).trim();
-        return Integer.valueOf(attr);
-      } else {
-        return Integer.valueOf(attr);
-      }
-    } catch (NumberFormatException e) {
-      return defaultValue;
-    }
-  }
-
   public void setMinTextSize(float minTextSize) {
     this.minTextSize = minTextSize;
   }
@@ -184,9 +167,4 @@
       refitText(getText(), width);
     }
   }
-
-  private int spToPx(int sp) {
-    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp,
-        getResources().getDisplayMetrics());
-  }
 }
diff --git a/app/src/main/java/com/google/reviewit/widget/UserView.java b/app/src/main/java/com/google/reviewit/widget/UserView.java
index 58e61d5..23ab47d 100644
--- a/app/src/main/java/com/google/reviewit/widget/UserView.java
+++ b/app/src/main/java/com/google/reviewit/widget/UserView.java
@@ -15,9 +15,12 @@
 package com.google.reviewit.widget;
 
 import android.content.Context;
+import android.content.res.TypedArray;
 import android.util.AttributeSet;
+import android.util.TypedValue;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.TextView;
 
 import com.google.gerrit.extensions.common.AccountInfo;
 import com.google.reviewit.R;
@@ -39,6 +42,23 @@
     super(context, attrs, defStyle);
 
     inflate(context, R.layout.user, this);
+
+    WidgetUtil widgetUtil = new WidgetUtil(context);
+    TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
+        R.styleable.UserView, 0, 0);
+    int avatarSize = (int) widgetUtil.toDimension(
+        a.getString(R.styleable.UserView_avatarSize), -1);
+    if (avatarSize > 0) {
+      findViewById(R.id.avatar).setLayoutParams(new LayoutParams(avatarSize,
+          avatarSize));
+    }
+
+    float textSize = widgetUtil.toDimension(
+        a.getString(R.styleable.UserView_textSize), -1);
+    if (textSize > 0) {
+      ((TextView)findViewById(R.id.userName)).setTextSize(
+          TypedValue.COMPLEX_UNIT_PX, textSize);
+    }
   }
 
   public void init(ReviewItApp app, AccountInfo account) {
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 662122a..3d6fa8e 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -21,4 +21,9 @@
     <attr name="maxLineLength" format="integer"/>
     <attr name="ellipsize" format="boolean"/>
   </declare-styleable>
+
+  <declare-styleable name="UserView">
+    <attr name="avatarSize" format="string"/>
+    <attr name="textSize" format="string"/>
+  </declare-styleable>
 </resources>
