diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java
index eeb778df6..a17c130fb 100644
--- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java
@@ -32,6 +32,7 @@ import fr.free.nrw.commons.MediaWikiImageView;
import fr.free.nrw.commons.PageTitle;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.location.LatLng;
+import fr.free.nrw.commons.ui.widget.CompatTextView;
import fr.free.nrw.commons.utils.UiUtils;
import timber.log.Timber;
@@ -285,17 +286,10 @@ public class MediaDetailFragment extends Fragment {
private View buildCatLabel(final String catName) {
final View item = getLayoutInflater(null).inflate(R.layout.detail_category_item, null, false);
- final TextView textView = (TextView)item.findViewById(R.id.mediaDetailCategoryItemText);
+ final CompatTextView textView = (CompatTextView)item.findViewById(R.id.mediaDetailCategoryItemText);
textView.setText(catName);
if (categoriesLoaded && categoriesPresent) {
- textView.setCompoundDrawablesWithIntrinsicBounds(
- AppCompatResources.getDrawable(
- getContext(),
- R.drawable.ic_info_outline_white_24dp),
- null, null, null);
- textView.setCompoundDrawablePadding((int) UiUtils.convertDpToPixel(6, getContext()));
- textView.setGravity(Gravity.CENTER_VERTICAL);
textView.setOnClickListener(view -> {
String selectedCategoryTitle = "Category:" + catName;
Intent viewIntent = new Intent();
diff --git a/app/src/main/java/fr/free/nrw/commons/ui/widget/CompatTextView.java b/app/src/main/java/fr/free/nrw/commons/ui/widget/CompatTextView.java
new file mode 100644
index 000000000..f6cb2ac9e
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/ui/widget/CompatTextView.java
@@ -0,0 +1,69 @@
+package fr.free.nrw.commons.ui.widget;
+
+/**
+ * Created by mikel on 07/08/2017.
+ */
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.support.annotation.Nullable;
+import android.support.v4.view.ViewCompat;
+import android.support.v7.widget.AppCompatDrawableManager;
+import android.support.v7.widget.AppCompatTextView;
+import android.util.AttributeSet;
+
+import fr.free.nrw.commons.R;
+import fr.free.nrw.commons.utils.UiUtils;
+
+public class CompatTextView extends AppCompatTextView {
+ public CompatTextView(Context context) {
+ super(context);
+ init(null);
+ }
+
+ public CompatTextView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(attrs);
+ }
+
+ public CompatTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init(attrs);
+ }
+
+ private void init(@Nullable AttributeSet attrs) {
+ if (attrs != null) {
+ Context context = getContext();
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CompatTextView);
+
+ // Obtain DrawableManager used to pull Drawables safely, and check if we're in RTL
+ AppCompatDrawableManager dm = AppCompatDrawableManager.get();
+ boolean rtl = ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL;
+
+ // Grab the compat drawable padding from the XML
+ float drawablePadding = a.getDimension(R.styleable.CompatTextView_drawablePadding, 0);
+
+ // Grab the compat drawable resources from the XML
+ int startDrawableRes = a.getResourceId(R.styleable.CompatTextView_drawableStart, 0);
+ int topDrawableRes = a.getResourceId(R.styleable.CompatTextView_drawableTop, 0);
+ int endDrawableRes = a.getResourceId(R.styleable.CompatTextView_drawableEnd, 0);
+ int bottomDrawableRes = a.getResourceId(R.styleable.CompatTextView_drawableBottom, 0);
+
+ // Load the used drawables, falling back to whatever may be set in an "android:" namespace attribute
+ Drawable[] currentDrawables = getCompoundDrawables();
+ Drawable left = startDrawableRes != 0 ? dm.getDrawable(context, startDrawableRes) : currentDrawables[0];
+ Drawable right = endDrawableRes != 0 ? dm.getDrawable(context, endDrawableRes) : currentDrawables[1];
+ Drawable top = topDrawableRes != 0 ? dm.getDrawable(context, topDrawableRes) : currentDrawables[2];
+ Drawable bottom = bottomDrawableRes != 0 ? dm.getDrawable(context, bottomDrawableRes) : currentDrawables[3];
+
+ // Account for RTL and apply the compound Drawables
+ Drawable start = rtl ? right : left;
+ Drawable end = rtl ? left : right;
+ setCompoundDrawablesWithIntrinsicBounds(start, top, end, bottom);
+ setCompoundDrawablePadding((int) UiUtils.convertDpToPixel(drawablePadding, getContext()));
+
+ a.recycle();
+ }
+ }
+}
diff --git a/app/src/main/res/layout/detail_category_item.xml b/app/src/main/res/layout/detail_category_item.xml
index 3b74af4d4..89197db5d 100644
--- a/app/src/main/res/layout/detail_category_item.xml
+++ b/app/src/main/res/layout/detail_category_item.xml
@@ -1,20 +1,24 @@
-
-
@@ -166,21 +165,20 @@
android:textSize="16sp"
android:textStyle="bold" />
-
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index e56bddc85..22da8c207 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -13,4 +13,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file