Skip to content

Commit 4580f70

Browse files
committed
gravity attr and setters
1 parent 9c32841 commit 4580f70

4 files changed

Lines changed: 109 additions & 31 deletions

File tree

app/src/main/java/com/devzone/ctv_sample/MainActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package com.devzone.ctv_sample
33
import android.os.Bundle
44
import android.view.View
55
import androidx.appcompat.app.AppCompatActivity
6-
import com.devzone.checkabletextview.CheckableTextView
6+
import com.devzone.checkabletextview.CheckedListener
77
import kotlinx.android.synthetic.main.activity_main.*
88

99

10-
class MainActivity : AppCompatActivity(), CheckableTextView.CheckedListener {
10+
class MainActivity : AppCompatActivity(), CheckedListener {
1111
override fun onCreate(savedInstanceState: Bundle?) {
1212
super.onCreate(savedInstanceState)
1313
setContentView(R.layout.activity_main)

checkabletextview/src/main/java/com/devzone/checkabletextview/CheckableTextView.kt

Lines changed: 84 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ import android.graphics.drawable.ColorDrawable
66
import android.os.Build
77
import android.util.AttributeSet
88
import android.util.TypedValue
9+
import android.view.Gravity
910
import android.view.LayoutInflater
1011
import android.view.View
1112
import android.widget.RelativeLayout
12-
import androidx.annotation.RestrictTo
13+
import androidx.annotation.*
1314
import androidx.appcompat.app.AppCompatDelegate
1415
import androidx.core.content.ContextCompat
1516
import kotlinx.android.synthetic.main.layout_checkable_text.view.*
@@ -49,33 +50,37 @@ class CheckableTextView : RelativeLayout {
4950
this, true)
5051
attributeSet.let {
5152
val array: TypedArray = context.obtainStyledAttributes(attributeSet, R.styleable.CheckableTextView)
52-
val iconTint = array.getColor(
53-
R.styleable.CheckableTextView_ctv_IconTint,
54-
ContextCompat.getColor(context, defaultIconTintColor)
55-
)
56-
val textColor = array.getColor(
57-
R.styleable.CheckableTextView_ctv_TextColor,
58-
ContextCompat.getColor(context, defaultTextColor)
59-
)
60-
val text = array.getString(R.styleable.CheckableTextView_ctv_Text)
61-
isChecked = array.getBoolean(R.styleable.CheckableTextView_ctv_IconChecked, false)
62-
val textSize = array.getDimensionPixelSize(R.styleable.CheckableTextView_ctv_TextSize, 0)
63-
val textStyle = array.getResourceId(R.styleable.CheckableTextView_ctv_TextStyle, 0)
64-
checkIcon = array.getResourceId(R.styleable.CheckableTextView_ctv_Icon, 0)
65-
66-
//giving applied style attrs least preference (colors n text size will be override by ctv_TextColor & ctv_TextSize as applied later)
67-
applyTextStyle(textStyle, context)
68-
validateCheckIcon(context)
69-
checkedTextTV.text = text
70-
checkedTextTV.isSelected = true
71-
checkedTextTV.setTextColor(textColor)
72-
checkedIV.setImageResource(checkIcon)
73-
74-
if (isValidRes(textSize))
75-
checkedTextTV.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize.toFloat())
76-
if (isValidRes(iconTint))
77-
checkedIV.setColorFilter(iconTint)
53+
if (array.length() > 0) {
54+
val iconTint = array.getColor(
55+
R.styleable.CheckableTextView_ctv_IconTint,
56+
ContextCompat.getColor(context, defaultIconTintColor)
57+
)
58+
val textColor = array.getColor(
59+
R.styleable.CheckableTextView_ctv_TextColor,
60+
ContextCompat.getColor(context, defaultTextColor)
61+
)
62+
val text = array.getString(R.styleable.CheckableTextView_ctv_Text)
63+
isChecked = array.getBoolean(R.styleable.CheckableTextView_ctv_IconChecked, false)
64+
val textSize = array.getDimensionPixelSize(R.styleable.CheckableTextView_ctv_TextSize, 0)
65+
val textStyle = array.getResourceId(R.styleable.CheckableTextView_ctv_TextStyle, 0)
66+
checkIcon = array.getResourceId(R.styleable.CheckableTextView_ctv_Icon, 0)
67+
val gravity = array.getInt(R.styleable.CheckableTextView_ctv_TextGravity, Gravity.CENTER)
68+
69+
//giving applied style attrs least preference (colors n text size will be override by ctv_TextColor & ctv_TextSize as applied later)
70+
applyTextStyle(textStyle, context)
71+
validateCheckIcon(context)
72+
checkedTextTV.text = text
73+
checkedTextTV.isSelected = true
74+
checkedTextTV.gravity = gravity
75+
checkedTextTV.setTextColor(textColor)
76+
checkedIV.setImageResource(checkIcon)
77+
78+
if (isValidRes(textSize))
79+
checkedTextTV.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize.toFloat())
80+
if (isValidRes(iconTint))
81+
checkedIV.setColorFilter(iconTint)
7882

83+
}
7984
array.recycle()
8085
}
8186

@@ -124,6 +129,7 @@ class CheckableTextView : RelativeLayout {
124129

125130

126131
private fun isValidRes(res: Int) = res != 0
132+
private fun emptyNullCheck(text: String?) = text != null && !text.isBlank();
127133

128134
private fun notifyListener(isChecked: Boolean) {
129135
listener?.onCheckChange(this, isChecked)
@@ -171,7 +177,56 @@ class CheckableTextView : RelativeLayout {
171177
return this.isChecked
172178
}
173179

174-
interface CheckedListener {
175-
fun onCheckChange(view: View, isChecked: Boolean)
180+
181+
////---------------------------setters------------------------------------------------------------------------------------------////
182+
183+
fun setIconTint(@ColorRes resId: Int) {
184+
if (isValidRes(resId)) {
185+
val color = ContextCompat.getColor(context, resId)
186+
checkedIV.setColorFilter(color)
187+
}
188+
}
189+
190+
fun setTextSize(@DimenRes resId: Int) {
191+
if (isValidRes(resId)) {
192+
val dimension = resources.getDimensionPixelSize(resId)
193+
checkedTextTV.setTextSize(TypedValue.COMPLEX_UNIT_PX, dimension.toFloat())
194+
}
195+
}
196+
197+
fun setTextColor(@ColorRes resId: Int) {
198+
if (isValidRes(resId)) {
199+
val color = ContextCompat.getColor(context, resId)
200+
checkedTextTV.setTextColor(color)
201+
}
202+
}
203+
204+
fun setText(@StringRes resId: Int) {
205+
if (isValidRes(resId)) {
206+
val string = context.getString(resId)
207+
setText(string)
208+
}
209+
}
210+
211+
fun setText(text: String) {
212+
if (emptyNullCheck(text))
213+
checkedTextTV.text = text
214+
}
215+
216+
fun setTextGravity(gravity: Int) {
217+
checkedTextTV.gravity = gravity
218+
}
219+
220+
fun setIcon(@DrawableRes resId: Int) {
221+
if (isValidRes(resId)) {
222+
checkIcon = resId
223+
validateCheckIcon(context)
224+
checkedIV.setImageResource(checkIcon)
225+
}
226+
}
227+
228+
fun setTextStyle(@StyleRes resId: Int) {
229+
if (isValidRes(resId))
230+
applyTextStyle(resId, context)
176231
}
177232
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.devzone.checkabletextview
2+
3+
import android.view.View
4+
5+
interface CheckedListener {
6+
fun onCheckChange(view: View, isChecked: Boolean)
7+
}

checkabletextview/src/main/res/values/attrs.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,22 @@
99
<attr name="ctv_TextStyle" format="reference|integer"/>
1010
<attr name="ctv_Icon" format="reference|integer"/>
1111
<attr name="ctv_IconChecked" format="boolean"/>
12+
<attr name="ctv_TextGravity">
13+
<flag name="bottom" value="80" />
14+
<flag name="center" value="17" />
15+
<flag name="center_horizontal" value="1" />
16+
<flag name="center_vertical" value="16" />
17+
<flag name="clip_horizontal" value="8" />
18+
<flag name="clip_vertical" value="128" />
19+
<flag name="end" value="8388613" />
20+
<flag name="fill" value="119" />
21+
<flag name="fill_horizontal" value="7" />
22+
<flag name="fill_vertical" value="112" />
23+
<flag name="left" value="3" />
24+
<flag name="right" value="5" />
25+
<flag name="start" value="8388611" />
26+
<flag name="top" value="48" />
27+
</attr>
1228
</declare-styleable>
1329

1430
</resources>

0 commit comments

Comments
 (0)