Skip to content

Commit 7e8ff0a

Browse files
author
jelic98
committed
Synced manual
1 parent 1d713f4 commit 7e8ff0a

File tree

6 files changed

+138
-54
lines changed

6 files changed

+138
-54
lines changed

MANUAL.md

Lines changed: 97 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* [Device targeting](#device-targeting)
88
* [Configuration fields](#configuration-fields)
99
* [Event listeners](#event-listeners)
10+
* [Resource caching](#resource-caching)
1011
* [Custom views](#custom-views)
1112
* [Supported attributes](#supported-attributes)
1213
* [View](#view)
@@ -183,6 +184,17 @@
183184
}
184185
```
185186

187+
### Resource caching
188+
189+
```json
190+
{
191+
"class":"android.widget.ImageView",
192+
"attributes":{
193+
"cache":"TRUE | FALSE"
194+
}
195+
}
196+
```
197+
186198
### Custom views
187199

188200
```json
@@ -243,17 +255,19 @@ Parent of all other views. Every view inherits attributes from this.
243255
"pivotY":"float",
244256
"x":"float",
245257
"y":"float",
246-
"clickable":"true | false",
258+
"clickable":"TRUE | FALSE",
247259
"background":"resource_url",
260+
"onClick":"event_listener",
261+
"conditions":"device_targets",
248262
"layout_weight":"float",
249263
"layout_gravity":"START | END | TOP | BOTTOM | CENTER | CENTER_HORIZONTAL | CENTER_VERTICAL",
250-
"center_horizontal":"true | false",
251-
"center_vertical":"true | false",
252-
"center_in_parent":"true | false",
253-
"align_parent_start":"true | false",
254-
"align_parent_top":"true | false",
255-
"align_parent_end":"true | false",
256-
"align_parent_bottom":"true | false",
264+
"center_horizontal":"TRUE | FALSE",
265+
"center_vertical":"TRUE | FALSE",
266+
"center_in_parent":"TRUE | FALSE",
267+
"align_parent_start":"TRUE | FALSE",
268+
"align_parent_top":"TRUE | FALSE",
269+
"align_parent_end":"TRUE | FALSE",
270+
"align_parent_bottom":"TRUE | FALSE",
257271
"layout_above":"view_id",
258272
"layout_below":"view_id",
259273
"layout_alignStart":"view_id",
@@ -262,7 +276,7 @@ Parent of all other views. Every view inherits attributes from this.
262276
"layout_alignBottom":"view_id",
263277
"layout_alignBaseline":"view_id",
264278
"layout_toStartOf":"view_id",
265-
"layout_toEndOf":"view_id"
279+
"layout_toEndOf":"view_id",
266280
}
267281
}
268282
```
@@ -280,11 +294,11 @@ Inherits everything from View.
280294
"gravity":"START | END | TOP | BOTTOM | CENTER | CENTER_HORIZONTAL | CENTER_VERTICAL",
281295
"horizontalGravity":"START | END | TOP | BOTTOM | CENTER | CENTER_HORIZONTAL | CENTER_VERTICAL",
282296
"verticalGravity":"START | END | TOP | BOTTOM | CENTER | CENTER_HORIZONTAL | CENTER_VERTICAL",
283-
"showDividers":"SHOW_DIVIDER_BEGINNING | SHOW_DIVIDER_MIDDLE | SHOW_DIVIDER_END | SHOW_DIVIDER_NONE",
297+
"showDividers":"BEGINNING | MIDDLE | END | NONE",
284298
"dividerDrawable":"resource_url",
285299
"dividerPadding":"units",
286-
"baselineAligned":"true | false",
287-
"measureWithLargestChildEnabled":"true | false",
300+
"baselineAligned":"TRUE | FALSE",
301+
"measureWithLargestChildEnabled":"TRUE | FALSE",
288302
"baselineAlignedChildIndex":"int"
289303
}
290304
}
@@ -314,7 +328,7 @@ Inherits everything from View.
314328
{
315329
"class":"android.widget.FrameLayout",
316330
"attributes":{
317-
"measureAllChildren":"true | false",
331+
"measureAllChildren":"TRUE | FALSE",
318332
"foregroundGravity":"START | END | TOP | BOTTOM | CENTER | CENTER_HORIZONTAL | CENTER_VERTICAL"
319333
}
320334
}
@@ -332,9 +346,9 @@ Inherits everything from View.
332346
"orientation":"VERTICAL | HORIZONTAL",
333347
"columnCount":"int",
334348
"rowCount":"int",
335-
"columnOrderPreserved":"true | false",
336-
"rowOrderPreserved":"true | false",
337-
"useDefaultMargins":"true | false"
349+
"columnOrderPreserved":"TRUE | FALSE",
350+
"rowOrderPreserved":"TRUE | FALSE",
351+
"useDefaultMargins":"TRUE | FALSE"
338352
}
339353
}
340354
```
@@ -347,9 +361,9 @@ Inherits everything from FrameLayout.
347361
{
348362
"class":"android.widget.ScrollView",
349363
"attributes":{
350-
"fillViewport":"true | false",
351-
"smoothScrollingEnabled":"true | false",
352-
"overScrollMode":"OVER_SCROLL_ALWAYS | OVER_SCROLL_NEVER | OVER_SCROLL_IF_CONTENT_SCROLLS"
364+
"fillViewport":"TRUE | FALSE",
365+
"smoothScrollingEnabled":"TRUE | FALSE",
366+
"overScrollMode":"ALWAYS | NEVER | IF_CONTENT_SCROLLS"
353367
}
354368
}
355369
```
@@ -363,16 +377,67 @@ Inherits everything from View.
363377
"class":"android.widget.TextView",
364378
"attributes":{
365379
"text":"string",
380+
"error":"string",
381+
"hint":"string",
382+
"textKeepState":"string",
366383
"textSize":"units",
367384
"textColor":"hex_value | color_name",
385+
"hintTextColor":"hex_value | color_name",
386+
"linkTextColor":"hex_value | color_name",
387+
"highlightColor":"hex_value | color_name",
388+
"singleLine":"TRUE | FALSE",
368389
"textStyle":"NORMAL | BOLD | ITALIC | BOLD_ITALIC",
369390
"gravity":"START | END | TOP | BOTTOM | CENTER | CENTER_HORIZONTAL | CENTER_VERTICAL",
370391
"ellipsize":"START | MIDDLE | END | MARQUEE | END_SMALL",
371-
"hint":"string"
372-
}
392+
"allCaps":"TRUE | FALSE",
393+
"cursorVisible":"TRUE | FALSE",
394+
"enabled":"TRUE | FALSE",
395+
"freezesText":"TRUE | FALSE",
396+
"horizontallyScrolling":"TRUE | FALSE",
397+
"includeFontPadding":"TRUE | FALSE",
398+
"linksClickable":"TRUE | FALSE",
399+
"selectAllOnFocus":"TRUE | FALSE",
400+
"selected":"TRUE | FALSE",
401+
"textIsSelectable":"TRUE | FALSE",
402+
"privateImeOptions":"string",
403+
"textScaleX":"float",
404+
"width":"units",
405+
"maxWidth":"units",
406+
"minWidth":"units",
407+
"height":"units",
408+
"maxHeight":"units",
409+
"minHeight":"units",
410+
"lines":"int",
411+
"maxLines":"int",
412+
"minLines":"int",
413+
"ems":"int",
414+
"maxEms":"int",
415+
"minEms":"int",
416+
"compoundDrawablePadding":"units",
417+
"onKey":"event_listener",
418+
"textLocale":"ENGLISH | FRENCH | GERMAN | ITALIAN | JAPANESE | KOREAN | CHINESE | SIMPLIFIED_CHINESE | TRADITIONAL_CHINESE | FRANCE | GERMANY | ITALY | JAPAN | KOREA | UK | US | CANADA | CANADA_FRENCH",
419+
"imeOptions":"DONE | GO | NEXT | NONE | PREVIOUS | SEARCH | SEND | UNSPECIFIED",
420+
"inputType":"CLASS_TEXT | CLASS_DATETIME | CLASS_NUMBER | CLASS_PHONE | DATETIME_VARIATION_DATE | DATETIME_VARIATION_NORMAL | DATETIME_VARIATION_TIME | MASK_CLASS | MASK_FLAGS | MASK_VARIATION | NULL | NUMBER_FLAG_DECIMAL | NUMBER_FLAG_SIGNED | NUMBER_VARIATION_NORMAL | NUMBER_VARIATION_PASSWORD | TEXT_FLAG_AUTO_COMPLETE | TEXT_FLAG_AUTO_CORRECT | TEXT_FLAG_CAP_CHARACTERS | TEXT_FLAG_CAP_SENTENCES | TEXT_FLAG_CAP_WORDS | TEXT_FLAG_IME_MULTI_LINE | TEXT_FLAG_MULTI_LINE | TEXT_FLAG_NO_SUGGESTIONS | TEXT_VARIATION_EMAIL_ADDRESS | TEXT_VARIATION_EMAIL_SUBJECT | TEXT_VARIATION_FILTER | TEXT_VARIATION_LONG_MESSAGE | TEXT_VARIATION_NORMAL | TEXT_VARIATION_PASSWORD | TEXT_VARIATION_PERSON_NAME | TEXT_VARIATION_PHONETIC | TEXT_VARIATION_POSTAL_ADDRESS | TEXT_VARIATION_SHORT_MESSAGE | TEXT_VARIATION_URI | TEXT_VARIATION_VISIBLE_PASSWORD | TEXT_VARIATION_WEB_EDIT_TEXT | TEXT_VARIATION_WEB_EMAIL_ADDRESS | TEXT_VARIATION_WEB_PASSWORD",
421+
"rawInputType":"CLASS_TEXT | CLASS_DATETIME | CLASS_NUMBER | CLASS_PHONE | DATETIME_VARIATION_DATE | DATETIME_VARIATION_NORMAL | DATETIME_VARIATION_TIME | MASK_CLASS | MASK_FLAGS | MASK_VARIATION | NULL | NUMBER_FLAG_DECIMAL | NUMBER_FLAG_SIGNED | NUMBER_VARIATION_NORMAL | NUMBER_VARIATION_PASSWORD | TEXT_FLAG_AUTO_COMPLETE | TEXT_FLAG_AUTO_CORRECT | TEXT_FLAG_CAP_CHARACTERS | TEXT_FLAG_CAP_SENTENCES | TEXT_FLAG_CAP_WORDS | TEXT_FLAG_IME_MULTI_LINE | TEXT_FLAG_MULTI_LINE | TEXT_FLAG_NO_SUGGESTIONS | TEXT_VARIATION_EMAIL_ADDRESS | TEXT_VARIATION_EMAIL_SUBJECT | TEXT_VARIATION_FILTER | TEXT_VARIATION_LONG_MESSAGE | TEXT_VARIATION_NORMAL | TEXT_VARIATION_PASSWORD | TEXT_VARIATION_PERSON_NAME | TEXT_VARIATION_PHONETIC | TEXT_VARIATION_POSTAL_ADDRESS | TEXT_VARIATION_SHORT_MESSAGE | TEXT_VARIATION_URI | TEXT_VARIATION_VISIBLE_PASSWORD | TEXT_VARIATION_WEB_EDIT_TEXT | TEXT_VARIATION_WEB_EMAIL_ADDRESS | TEXT_VARIATION_WEB_PASSWORD",
422+
"autoLinkMask":"ALL | EMAIL_ADDRESSES | MAP_ADDRESSES | PHONE_NUMBERS | WEB_URLS",
423+
"marqueeRepeatLimit":"int",
424+
"letterSpacing":"float",
425+
"elegantTextHeight":"TRUE | FALSE",
426+
"showSoftInputOnFocus":"TRUE | FALSE",
427+
"fontFeatureSettings":"string",
428+
"compoundDrawableTintMode":"CLEAR | SRC | DST | SRC_OVER | DST_OVER | SRC_IN | DST_IN | SRC_OUT | DST_OUT | SRC_ATOP | DST_ATOP | XOR | DARKEN | LIGHTEN | MULTIPLY | SCREEN | ADD | OVERLAY",
429+
"hyphenationFrequency":"NORMAL | FULL | NONE",
430+
"breakStrategy":"BALANCED | SIMPLE | HIGH_QUALITY",
431+
"fontVariationSettings":"string",
432+
"autoSizeTextTypeWithDefaults":"UNIFORM | NONE",
433+
"justificationMode":"INTER_WORD | NONE"
373434
}
374435
```
375436

437+
#### EditText
438+
439+
Inherits everything from TextView.
440+
376441
#### ImageView
377442

378443
Inherits everything from View.
@@ -382,15 +447,14 @@ Inherits everything from View.
382447
"class":"android.widget.ImageView",
383448
"attributes":{
384449
"src":"resource_url",
385-
"cache":"true | false",
386450
"scaleType":"MATRIX | FIT_XY | FIT_START | FIT_CENTER | FIT_END | CENTER | CENTER_CROP | CENTER_INSIDE",
387-
"adjustViewBounds":"true | false",
451+
"adjustViewBounds":"TRUE | FALSE",
388452
"maxWidth":"units",
389453
"maxHeight":"units",
390454
"baseline":"units",
391-
"baselineAlignBottom":"true | false",
392-
"cropToPadding":"true | false",
393-
"selected":"true | false",
455+
"baselineAlignBottom":"TRUE | FALSE",
456+
"cropToPadding":"TRUE | FALSE",
457+
"selected":"TRUE | FALSE",
394458
"imageAlpha":"int",
395459
"imageLevel":"int",
396460
"colorFilter":"hex_value | color_name",
@@ -411,9 +475,10 @@ Inherits everything from Button.
411475
{
412476
"class":"android.widget.CompoundButton",
413477
"attributes":{
414-
"checked":"true | false ",
478+
"checked":"TRUE | FALSE ",
415479
"buttonDrawable":"resource_url",
416-
"onCheck":"event_listener"
480+
"onCheck":"event_listener",
481+
"buttonTintMode":"CLEAR | SRC | DST | SRC_OVER | DST_OVER | SRC_IN | DST_IN | SRC_OUT | DST_OUT | SRC_ATOP | DST_ATOP | XOR | DARKEN | LIGHTEN | MULTIPLY | SCREEN | ADD | OVERLAY"
417482
}
418483
}
419484
```
@@ -441,8 +506,10 @@ Inherits everything from CompoundButton.
441506
"thumbTextPadding":"units",
442507
"thumbDrawable":"resource_url",
443508
"trackDrawable":"resource_url",
444-
"showText":"true | false",
445-
"splitTrack":"true | false"
509+
"showText":"TRUE | FALSE",
510+
"splitTrack":"TRUE | FALSE",
511+
"thumbTintMode":"CLEAR | SRC | DST | SRC_OVER | DST_OVER | SRC_IN | DST_IN | SRC_OUT | DST_OUT | SRC_ATOP | DST_ATOP | XOR | DARKEN | LIGHTEN | MULTIPLY | SCREEN | ADD | OVERLAY",
512+
"trackTintMode":"CLEAR | SRC | DST | SRC_OVER | DST_OVER | SRC_IN | DST_IN | SRC_OUT | DST_OUT | SRC_ATOP | DST_ATOP | XOR | DARKEN | LIGHTEN | MULTIPLY | SCREEN | ADD | OVERLAY"
446513
}
447514
}
448515
```

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,5 +147,6 @@ Attaches options to Dynamico object
147147
Starts layout fetching from cache/server depending on provided options
148148

149149
## TODO
150+
* Update MANUAL with shorter enum names
150151
* Support vector drawables
151152
* Support more views

app/src/main/java/org/ecloga/dynamico/style/CompoundButtonStyler.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.ecloga.dynamico.style;
22

33
import android.content.Context;
4+
import android.graphics.PorterDuff;
45
import android.graphics.drawable.Drawable;
6+
import android.os.Build;
57
import android.view.View;
68
import android.widget.CompoundButton;
9+
import org.ecloga.dynamico.Util;
710
import org.json.JSONObject;
811

912
class CompoundButtonStyler extends TextViewStyler implements OnDrawableLoadedListener {
@@ -45,6 +48,16 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
4548
});
4649
}
4750

51+
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
52+
if(attributes.has("buttonTintMode")) {
53+
try {
54+
compoundButton.setButtonTintMode(PorterDuff.Mode.valueOf(attributes.getString("buttonTintMode")));
55+
}catch(IllegalArgumentException e) {
56+
Util.log("Style error", e.getMessage());
57+
}
58+
}
59+
}
60+
4861
return compoundButton;
4962
}
5063

app/src/main/java/org/ecloga/dynamico/style/LinearLayoutStyler.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44
import android.graphics.drawable.Drawable;
5+
import android.support.v7.widget.LinearLayoutCompat;
56
import android.view.Gravity;
67
import android.view.View;
78
import android.widget.LinearLayout;
@@ -119,7 +120,17 @@ public View style(View view, JSONObject attributes) throws Exception {
119120
}
120121

121122
if(attributes.has("showDividers")) {
122-
linearLayout.setShowDividers(attributes.getInt("showDividers"));
123+
String dividers = attributes.getString("showDividers");
124+
125+
if(dividers.equalsIgnoreCase("beginning")) {
126+
linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_BEGINNING);
127+
}else if(dividers.equalsIgnoreCase("middle")) {
128+
linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
129+
}else if(dividers.equalsIgnoreCase("end")) {
130+
linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_END);
131+
}else if(dividers.equalsIgnoreCase("none")) {
132+
linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_NONE);
133+
}
123134
}
124135

125136
return linearLayout;

app/src/main/java/org/ecloga/dynamico/style/ScrollViewStyler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ public View style(View view, JSONObject attributes) throws Exception {
3030
if(attributes.has("overScrollMode")) {
3131
String mode = attributes.getString("overScrollMode");
3232

33-
if(mode.equalsIgnoreCase("over_scroll_always")) {
33+
if(mode.equalsIgnoreCase("always")) {
3434
scrollView.setOverScrollMode(ScrollView.OVER_SCROLL_ALWAYS);
35-
}else if(mode.equalsIgnoreCase("over_scroll_never")) {
35+
}else if(mode.equalsIgnoreCase("never")) {
3636
scrollView.setOverScrollMode(ScrollView.OVER_SCROLL_NEVER);
37-
}else if(mode.equalsIgnoreCase("over_scroll_if_content_scrolls")) {
37+
}else if(mode.equalsIgnoreCase("if_content_scrolls")) {
3838
scrollView.setOverScrollMode(ScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS);
3939
}
4040
}

app/src/main/java/org/ecloga/dynamico/style/TextViewStyler.java

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,14 @@ public View style(View view, JSONObject attributes) throws Exception {
121121
}
122122
}
123123

124+
if(attributes.has("ellipsize")) {
125+
try {
126+
textView.setEllipsize(TextUtils.TruncateAt.valueOf(attributes.getString("ellipsize")));
127+
}catch(IllegalArgumentException e) {
128+
Util.log("Style error", e.getMessage());
129+
}
130+
}
131+
124132
if(attributes.has("allCaps")) {
125133
textView.setAllCaps(attributes.getBoolean("allCaps"));
126134
}
@@ -157,26 +165,10 @@ public View style(View view, JSONObject attributes) throws Exception {
157165
textView.setSelected(attributes.getBoolean("selected"));
158166
}
159167

160-
if(attributes.has("singleLine")) {
161-
textView.setSingleLine(attributes.getBoolean("singleLine"));
162-
}
163-
164168
if(attributes.has("textIsSelectable")) {
165169
textView.setTextIsSelectable(attributes.getBoolean("textIsSelectable"));
166170
}
167171

168-
if(attributes.has("ellipsize")) {
169-
try {
170-
textView.setEllipsize(TextUtils.TruncateAt.valueOf(attributes.getString("ellipsize")));
171-
}catch(IllegalArgumentException e) {
172-
Util.log("Style error", e.getMessage());
173-
}
174-
}
175-
176-
if(attributes.has("includeFontPadding")) {
177-
textView.setIncludeFontPadding(attributes.getBoolean("includeFontPadding"));
178-
}
179-
180172
if(attributes.has("privateImeOptions")) {
181173
textView.setPrivateImeOptions(attributes.getString("privateImeOptions"));
182174
}
@@ -560,10 +552,10 @@ public boolean onKey(View v, int keyCode, KeyEvent event) {
560552
if(attributes.has("autoSizeTextTypeWithDefaults")) {
561553
String auto = attributes.getString("autoSizeTextTypeWithDefaults");
562554

563-
if(auto.equalsIgnoreCase("none")) {
564-
textView.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_NONE);
565-
}else if(auto.equalsIgnoreCase("uniform")) {
555+
if(auto.equalsIgnoreCase("uniform")) {
566556
textView.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM);
557+
}else if(auto.equalsIgnoreCase("none")) {
558+
textView.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_NONE);
567559
}
568560
}
569561

@@ -572,7 +564,7 @@ public boolean onKey(View v, int keyCode, KeyEvent event) {
572564

573565
if(mode.equalsIgnoreCase("inter_word")) {
574566
textView.setJustificationMode(Layout.JUSTIFICATION_MODE_INTER_WORD);
575-
}else if(mode.equalsIgnoreCase("uniform")) {
567+
}else if(mode.equalsIgnoreCase("none")) {
576568
textView.setJustificationMode(Layout.JUSTIFICATION_MODE_NONE);
577569
}
578570
}

0 commit comments

Comments
 (0)