diff --git a/README.md b/README.md
index ba93ef4..2f10185 100644
--- a/README.md
+++ b/README.md
@@ -79,6 +79,8 @@ tv.setVectorDrawableRight(CompoundIconTextView.UNDEFINED_RESOURCE);
|cit_drawableTop|Sets a drawable or vector drawable to top of TextView|
|cit_drawableBottom|Sets a drawable or vector drawable to bottom of TextView|
|cit_drawableRight|Sets a drawable or vector drawable to right of TextView|
+|cit_drawableStart|Sets a drawable or vector drawable to start of TextView (for RTL)|
+|cit_drawableEnd|Sets a drawable or vector drawable to end of TextView (for RTL)|
|cit_iconWidth|Sets a width of icon|
|cit_iconHeight|Sets a width of icon|
|cit_iconColor|Sets a icon color|
@@ -131,4 +133,4 @@ See the License for the specific language governing permissions and
limitations under the License.
```
-[preview]: /arts/preview.png
+[preview]: /arts/preview.jpg
diff --git a/arts/preview.jpg b/arts/preview.jpg
new file mode 100644
index 0000000..0f53452
Binary files /dev/null and b/arts/preview.jpg differ
diff --git a/arts/preview.png b/arts/preview.png
deleted file mode 100644
index ee1814c..0000000
Binary files a/arts/preview.png and /dev/null differ
diff --git a/compoundicontextview/src/main/java/com/github/aakira/compoundicontextview/CompoundIconTextView.java b/compoundicontextview/src/main/java/com/github/aakira/compoundicontextview/CompoundIconTextView.java
index 2416149..fd61098 100644
--- a/compoundicontextview/src/main/java/com/github/aakira/compoundicontextview/CompoundIconTextView.java
+++ b/compoundicontextview/src/main/java/com/github/aakira/compoundicontextview/CompoundIconTextView.java
@@ -18,10 +18,14 @@
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v4.graphics.drawable.DrawableCompat;
+import android.support.v4.text.TextUtilsCompat;
+import android.support.v4.view.ViewCompat;
import android.support.v7.content.res.AppCompatResources;
import android.support.v7.widget.AppCompatTextView;
import android.util.AttributeSet;
+import java.util.Locale;
+
/**
* You can use a vector drawable in TextView instead of drawableLeft, drawableTop, drawableRight and
* drawableBottom.
@@ -80,6 +84,12 @@ public CompoundIconTextView(Context context, @Nullable AttributeSet attrs, int d
drawableResIds[INDEX_TOP] = a.getResourceId(R.styleable.CompoundIconTextView_cit_drawableTop, UNDEFINED_RESOURCE);
drawableResIds[INDEX_RIGHT] = a.getResourceId(R.styleable.CompoundIconTextView_cit_drawableRight, UNDEFINED_RESOURCE);
drawableResIds[INDEX_BOTTOM] = a.getResourceId(R.styleable.CompoundIconTextView_cit_drawableBottom, UNDEFINED_RESOURCE);
+ if (a.hasValue(R.styleable.CompoundIconTextView_cit_drawableStart)) {
+ drawableResIds[isRtl() ? INDEX_RIGHT : INDEX_LEFT] = a.getResourceId(R.styleable.CompoundIconTextView_cit_drawableStart, UNDEFINED_RESOURCE);
+ }
+ if (a.hasValue(R.styleable.CompoundIconTextView_cit_drawableEnd)) {
+ drawableResIds[isRtl() ? INDEX_LEFT : INDEX_RIGHT] = a.getResourceId(R.styleable.CompoundIconTextView_cit_drawableEnd, UNDEFINED_RESOURCE);
+ }
iconWidth = a.getDimensionPixelSize(R.styleable.CompoundIconTextView_cit_iconWidth, UNDEFINED_RESOURCE);
iconHeight = a.getDimensionPixelSize(R.styleable.CompoundIconTextView_cit_iconHeight, UNDEFINED_RESOURCE);
iconColor = a.getColor(R.styleable.CompoundIconTextView_cit_iconColor, UNDEFINED_RESOURCE);
@@ -103,52 +113,42 @@ public CompoundIconTextView(Context context, @Nullable AttributeSet attrs, int d
* @param resourceId Set the {@link CompoundIconTextView#UNDEFINED_RESOURCE} if you want clear icon.
*/
public void setVectorDrawableLeft(@DrawableRes final int resourceId) {
- if (resourceId == UNDEFINED_RESOURCE) {
- drawables[INDEX_LEFT] = null;
- drawableResIds[INDEX_LEFT] = UNDEFINED_RESOURCE;
- updateIcons();
- } else {
- setVectorDrawable(INDEX_LEFT, resourceId);
- }
+ setVectorDrawable(INDEX_LEFT, resourceId);
}
/**
* @param resourceId Set the {@link CompoundIconTextView#UNDEFINED_RESOURCE} if you want clear icon.
*/
public void setVectorDrawableTop(@DrawableRes final int resourceId) {
- if (resourceId == UNDEFINED_RESOURCE) {
- drawables[INDEX_TOP] = null;
- drawableResIds[INDEX_TOP] = UNDEFINED_RESOURCE;
- updateIcons();
- } else {
- setVectorDrawable(INDEX_TOP, resourceId);
- }
+ setVectorDrawable(INDEX_TOP, resourceId);
}
/**
* @param resourceId Set the {@link CompoundIconTextView#UNDEFINED_RESOURCE} if you want clear icon.
*/
public void setVectorDrawableRight(@DrawableRes final int resourceId) {
- if (resourceId == UNDEFINED_RESOURCE) {
- drawables[INDEX_RIGHT] = null;
- drawableResIds[INDEX_RIGHT] = UNDEFINED_RESOURCE;
- updateIcons();
- } else {
- setVectorDrawable(INDEX_RIGHT, resourceId);
- }
+ setVectorDrawable(INDEX_RIGHT, resourceId);
}
/**
* @param resourceId Set the {@link CompoundIconTextView#UNDEFINED_RESOURCE} if you want clear icon.
*/
public void setVectorDrawableBottom(@DrawableRes final int resourceId) {
- if (resourceId == UNDEFINED_RESOURCE) {
- drawables[INDEX_BOTTOM] = null;
- drawableResIds[INDEX_BOTTOM] = UNDEFINED_RESOURCE;
- updateIcons();
- } else {
- setVectorDrawable(INDEX_BOTTOM, resourceId);
- }
+ setVectorDrawable(INDEX_BOTTOM, resourceId);
+ }
+
+ /**
+ * @param resourceId Set the {@link CompoundIconTextView#UNDEFINED_RESOURCE} if you want clear icon.
+ */
+ public void setVectorDrawableStart(@DrawableRes final int resourceId) {
+ setVectorDrawable(isRtl() ? INDEX_RIGHT : INDEX_LEFT, resourceId);
+ }
+
+ /**
+ * @param resourceId Set the {@link CompoundIconTextView#UNDEFINED_RESOURCE} if you want clear icon.
+ */
+ public void setVectorDrawableEnd(@DrawableRes final int resourceId) {
+ setVectorDrawable(isRtl() ? INDEX_LEFT : INDEX_RIGHT, resourceId);
}
/**
@@ -176,7 +176,7 @@ public void setIconColor(@ColorInt final int color) {
/**
* Change drawable icon size
*
- * @param widthRes Set width resource id
+ * @param widthRes Set width resource id
* @param heightRes Set height resource id
*/
public void setIconSizeResource(@DimenRes final int widthRes, @DimenRes final int heightRes) {
@@ -187,7 +187,7 @@ public void setIconSizeResource(@DimenRes final int widthRes, @DimenRes final in
/**
* Change drawable icon size
*
- * @param width Set width size
+ * @param width Set width size
* @param height Set height size
*/
public void setIconSize(@Dimension final int width, @Dimension final int height) {
@@ -218,10 +218,16 @@ private void setColorFilter(final int index, @ColorInt final int color) {
}
private void setVectorDrawable(final int index, @DrawableRes final int resourceId) {
- checkHasIconSize();
- setDrawable(index, resourceId);
- drawableResIds[index] = resourceId;
- updateIcons();
+ if (resourceId == UNDEFINED_RESOURCE) {
+ drawables[index] = null;
+ drawableResIds[index] = UNDEFINED_RESOURCE;
+ updateIcons();
+ } else {
+ checkHasIconSize();
+ setDrawable(index, resourceId);
+ drawableResIds[index] = resourceId;
+ updateIcons();
+ }
}
private void updateIcons() {
@@ -278,7 +284,7 @@ private static Bitmap drawable2Bitmap(final Drawable drawable, final int iconWid
* {@link android.content.res.Resources} or a {@link android.content.res.TypedArray}.
*/
private static void fixDrawable(@NonNull final Drawable drawable) {
- if (Build.VERSION.SDK_INT == 21
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP
&& VECTOR_DRAWABLE_CLAZZ_NAME.equals(drawable.getClass().getName())) {
fixVectorDrawableTinting(drawable);
}
@@ -302,4 +308,12 @@ private static void fixVectorDrawableTinting(final Drawable drawable) {
// Now set the original state
drawable.setState(originalState);
}
+
+ private boolean isRtl() {
+ Resources resources = getContext().getResources();
+ Locale locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
+ ? resources.getConfiguration().getLocales().getFirstMatch(resources.getAssets().getLocales())
+ : resources.getConfiguration().locale;
+ return TextUtilsCompat.getLayoutDirectionFromLocale(locale) == ViewCompat.LAYOUT_DIRECTION_RTL;
+ }
}
\ No newline at end of file
diff --git a/compoundicontextview/src/main/res/values/attrs.xml b/compoundicontextview/src/main/res/values/attrs.xml
index b26b6e5..28ada27 100644
--- a/compoundicontextview/src/main/res/values/attrs.xml
+++ b/compoundicontextview/src/main/res/values/attrs.xml
@@ -5,6 +5,8 @@
+
+
diff --git a/sample/src/main/res/drawable/ic_language_black_24px.xml b/sample/src/main/res/drawable/ic_language_black_24px.xml
new file mode 100644
index 0000000..d2d4140
--- /dev/null
+++ b/sample/src/main/res/drawable/ic_language_black_24px.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml
index ece9de0..93ec402 100644
--- a/sample/src/main/res/layout/activity_main.xml
+++ b/sample/src/main/res/layout/activity_main.xml
@@ -1,6 +1,7 @@
+ app:cit_iconWidth="4dp"
+ tools:ignore="HardcodedText" />
+ app:cit_iconWidth="@dimen/icon_size"
+ tools:ignore="HardcodedText" />
+ app:cit_iconWidth="@dimen/icon_size"
+ tools:ignore="HardcodedText" />
+ app:cit_iconWidth="@dimen/icon_size"
+ tools:ignore="HardcodedText" />
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/values-ar/strings.xml b/sample/src/main/res/values-ar/strings.xml
new file mode 100644
index 0000000..a7d8fbd
--- /dev/null
+++ b/sample/src/main/res/values-ar/strings.xml
@@ -0,0 +1,3 @@
+
+ من اليمين الى اليسار
+
diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml
index 376afb7..4cbf2b8 100644
--- a/sample/src/main/res/values/strings.xml
+++ b/sample/src/main/res/values/strings.xml
@@ -1,3 +1,4 @@
- CompoundIconTextView
+ CompoundIconTextView
+ Right to Left (in Arabic)