Skip to content

Commit 6f5966d

Browse files
committed
Merge branch 'dev'
2 parents 531daa2 + d13da02 commit 6f5966d

3 files changed

Lines changed: 191 additions & 0 deletions

File tree

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
package com.neopixl.pixlui.components.radiobutton;
2+
3+
import com.android.export.AllCapsTransformationMethod;
4+
import com.neopixl.pixlui.components.textview.FontFactory;
5+
import com.neopixl.pixlui.intern.PixlUIContants;
6+
7+
import android.annotation.SuppressLint;
8+
import android.content.Context;
9+
import android.graphics.Paint;
10+
import android.graphics.Typeface;
11+
import android.util.AttributeSet;
12+
13+
/*
14+
Copyright 2014 Olivier Demolliens
15+
16+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
17+
18+
file except in compliance with the License. You may obtain a copy of the License at
19+
20+
http://www.apache.org/licenses/LICENSE-2.0
21+
22+
Unless required by applicable law or agreed to in writing, software distributed under
23+
24+
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
25+
26+
ANY KIND, either express or implied. See the License for the specific language governing
27+
28+
permissions and limitations under the License.
29+
*/
30+
public class RadioButton extends android.widget.RadioButton {
31+
32+
/**
33+
* XML attribute
34+
*/
35+
private static String RADIOBUTTON_ATTRIBUTE_FONT_NAME = "typeface";
36+
private static final String RADIOBUTTON_OS_ATTRIBUTE_TEXT_ALL_CAPS = "textAllCaps";
37+
38+
/**
39+
* State
40+
*/
41+
private boolean mOldDeviceTextAllCaps;
42+
43+
public RadioButton(Context context) {
44+
super(context);
45+
radioButtonVersion();
46+
}
47+
48+
public RadioButton(Context context, AttributeSet attrs) {
49+
super(context, attrs);
50+
radioButtonVersion();
51+
setCustomFont(context, attrs);
52+
if (isOldDeviceTextAllCaps()) {
53+
setAllCaps(context, attrs);
54+
}
55+
}
56+
57+
public RadioButton(Context context, AttributeSet attrs, int defStyle) {
58+
super(context, attrs, defStyle);
59+
radioButtonVersion();
60+
setCustomFont(context, attrs);
61+
if (isOldDeviceTextAllCaps()) {
62+
setAllCaps(context, attrs);
63+
}
64+
}
65+
66+
/**
67+
* Define what version of code we need to use
68+
*/
69+
private void radioButtonVersion() {
70+
if (android.os.Build.VERSION.SDK_INT < 14) {
71+
setOldDeviceTextAllCaps(true);
72+
} else {
73+
setOldDeviceTextAllCaps(false);
74+
}
75+
}
76+
77+
/**
78+
* XML methods
79+
*
80+
* @param ctx
81+
* @param attrs
82+
*/
83+
private void setCustomFont(Context ctx, AttributeSet attrs) {
84+
85+
String typefaceName = attrs.getAttributeValue(
86+
PixlUIContants.SCHEMA_URL, RADIOBUTTON_ATTRIBUTE_FONT_NAME);
87+
88+
if (typefaceName != null) {
89+
setPaintFlags(this.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG
90+
| Paint.LINEAR_TEXT_FLAG);
91+
setCustomFont(ctx, typefaceName);
92+
}
93+
}
94+
95+
/**
96+
* XML methods
97+
*
98+
* @param ctx
99+
* @param attrs
100+
*/
101+
@SuppressLint("NewApi")
102+
private void setAllCaps(Context ctx, AttributeSet attrs) {
103+
104+
if (!isInEditMode()) {
105+
int indexSize = attrs.getAttributeCount();
106+
107+
boolean allCaps = false;
108+
109+
for (int i = 0; i < indexSize; i++) {
110+
if (attrs.getAttributeName(i).equals(
111+
RADIOBUTTON_OS_ATTRIBUTE_TEXT_ALL_CAPS)) {
112+
allCaps = attrs.getAttributeBooleanValue(i, false);
113+
break;
114+
}
115+
}
116+
117+
if (allCaps) {
118+
setAllCaps(allCaps);
119+
}
120+
}
121+
}
122+
123+
/**
124+
* Use this method to uppercase all char in text.
125+
*
126+
* @param allCaps
127+
*/
128+
@SuppressLint("NewApi")
129+
public void setAllCaps(boolean allCaps) {
130+
if (this.isOldDeviceTextAllCaps()) {
131+
if (allCaps) {
132+
setTransformationMethod(new AllCapsTransformationMethod(
133+
getContext()));
134+
} else {
135+
setTransformationMethod(null);
136+
}
137+
} else {
138+
super.setAllCaps(allCaps);
139+
}
140+
}
141+
142+
/**
143+
* Use this method to set a custom font in your code (/assets/fonts/)
144+
*
145+
* @param ctx
146+
* @param Font
147+
* Name, don't forget to add file extension
148+
* @return
149+
*/
150+
public boolean setCustomFont(Context ctx, String font) {
151+
Typeface tf = FontFactory.getInstance(ctx).getFont(font);
152+
if (tf != null) {
153+
setTypeface(tf);
154+
return true;
155+
} else {
156+
return false;
157+
}
158+
}
159+
160+
public boolean isOldDeviceTextAllCaps() {
161+
return mOldDeviceTextAllCaps;
162+
}
163+
164+
public void setOldDeviceTextAllCaps(boolean mOldDeviceTextAllCaps) {
165+
this.mOldDeviceTextAllCaps = mOldDeviceTextAllCaps;
166+
}
167+
168+
}

Sample/libs/pixlui.jar

2.08 KB
Binary file not shown.

Sample/res/layout/activity_main.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,27 @@
6363
android:text="@string/big_hello_world"
6464
pixlui:typeface="GearedSlab.ttf" />
6565

66+
<RadioGroup
67+
android:id="@+id/radioGroup"
68+
android:layout_width="wrap_content"
69+
android:layout_height="wrap_content"
70+
android:layout_above="@+id/editText5"
71+
android:layout_alignLeft="@+id/button1"
72+
android:layout_marginBottom="17dp" >
73+
74+
<com.neopixl.pixlui.components.radiobutton.RadioButton
75+
android:id="@+id/radioB1"
76+
android:layout_width="wrap_content"
77+
android:layout_height="wrap_content"
78+
android:checked="true"
79+
android:text="@string/hello_world" />
80+
81+
<com.neopixl.pixlui.components.radiobutton.RadioButton
82+
android:id="@+id/radioB2"
83+
android:layout_width="wrap_content"
84+
android:layout_height="wrap_content"
85+
android:text="@string/hello_world"
86+
pixlui:typeface="GearedSlab.ttf" />
87+
</RadioGroup>
88+
6689
</RelativeLayout>

0 commit comments

Comments
 (0)