This style guide is different from other you may see, because the focus is
centered on readability for print and the web. We created this style guide to
keep the code in our tutorials consistent.
Our overarching goals are conciseness, readability and simplicity.
You should also check out out Swift
and Objective-C
style guides too.
Inspiration
This style-guide is somewhat of a mash-up between the existing Java language
style guides, and a tutorial-readability focused Swift style-guide. The language
guidance is drawn from the Android contributors style guide
and the Google Java Style Guide.
Alterations to support additional readability in tutorials were inspired by the raywenderlich.com Swift style guide.
Android Studio Coding Style
It is possible to get Android Studio to adhere to these style guidelines, via
a rather complex sequence of menus. To make it easier, we’ve provided a coding
style that can be imported into Android Studio.
First, clone this repository and run install.sh.
Then, open Android Studio. To set this codestyle as the default, select File > Other Settings > Default Settings…:
Enum classes without methods may be formatted without line-breaks, as follows:
1
privateenumCompassDirection { EAST, NORTH, WEST, SOUTH }
Spacing
Spacing is especially important in raywenderlich.com code, as code needs to be
easily readable as part of the tutorial. Java does not lend itself well to this.
Indentation
Indentation is using spaces - never tabs.
Blocks
Indentation for blocks uses 2 spaces (not the default 4):
BAD:
1 2 3
for (inti=0; i < 10; i++) { Log.i(TAG, "index=" + i); }
GOOD:
1 2 3
for (inti=0; i < 10; i++) { Log.i(TAG, "index=" + i); }
Line Wraps
Indentation for line wraps should use 4 spaces (not the default 8):
BAD:
1 2
CoolUiWidgetwidget= someIncrediblyLongExpression(that, reallyWouldNotFit, on, aSingle, line);
GOOD:
1 2
CoolUiWidgetwidget= someIncrediblyLongExpression(that, reallyWouldNotFit, on, aSingle, line);
Line Length
Lines should be no longer than 100 characters long.
Vertical Spacing
There should be exactly one blank line between methods to aid in visual clarity
and organization. Whitespace within methods should separate functionality, but
having too many sections in a method often means you should refactor into
several methods.
Getters & Setters
For external access to fields in classes, getters and setters are preferred to
direct access of the fields. Fields should rarely be public.
Since Android uses XML extensively in addition to Java, we have some rules
specific to XML.
XML File Names
View-based XML files should be prefixed with the type of view that they
represent.
BAD:
login.xml
main_screen.xml
rounded_edges_button.xml
GOOD:
activity_login.xml
fragment_main_screen.xml
button_rounded_edges.xml
Indentation
Similarly to Java, indentation should be two characters.
Use Context-Specific XML Files
Wherever possible XML resource files should be used:
Strings => res/values/strings.xml
Styles => res/values/styles.xml
Colors => res/color/colors.xml
Animations => res/anim/
Drawable => res/drawable
XML Attribute Ordering
Where appropriate, XML attributes should appear in the following order:
id attribute
layout_* attributes
style attributes such as gravity or textColor
value attributes such as text or src
Within each of these groups, the attributes should be ordered alphabetically.
Language
Use US English spelling.
BAD:
1
Stringcolour="red";
GOOD:
1
Stringcolor="red";
Copyright Statement
The following copyright statement should be included at the top of every source
file:
/*
* Copyright (c) 2017 Razeware LLC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
* distribute, sublicense, create a derivative work, and/or sell copies of the
* Software in any work that is designed, intended, or marketed for pedagogical or
* instructional purposes related to programming, coding, application development,
* or information technology. Permission for such use, copying, modification,
* merger, publication, distribution, sublicensing, creation of derivative works,
* or sale is expressly withheld.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
Smiley Face
Smiley faces are a very prominent style feature of the raywenderlich.com site!
It is very important to have the correct smile signifying the immense amount of
happiness and excitement for the coding topic. The closing square bracket ] is
used because it represents the largest smile able to be captured using ASCII
art. A closing parenthesis ) creates a half-hearted smile, and thus is not
preferred.
Bad:
:)
Good:
:]
Credits
This style guide is a collaborative effort from the most stylish raywenderlich.com team members:
Our overarching goals are conciseness, readability and simplicity.
You should also check out out Swift
and Objective-C
style guides too.
Inspiration
This style-guide is somewhat of a mash-up between the existing Java language
style guides, and a tutorial-readability focused Swift style-guide. The language
guidance is drawn from the Android contributors style guide
and the Google Java Style Guide.
Alterations to support additional readability in tutorials were inspired by the raywenderlich.com Swift style guide.