Skip to content

Instantly share code, notes, and snippets.

@zakrodionov
Last active November 12, 2019 16:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zakrodionov/180ceae94a895f4855a8b31882848d7b to your computer and use it in GitHub Desktop.
Save zakrodionov/180ceae94a895f4855a8b31882848d7b to your computer and use it in GitHub Desktop.
Rovas code styles

UI guideline

https://learnui.design/blog/ios-vs-android-app-ui-design-complete-guide.html

Resource Naming Guideline

/layout

<what>_<where> (snake_case)

what where sample
activity Content View of Activity activity_splash.xml
fragment View of Fragment fragment_product_detail.xml
dialog View of Dialog dialog_new_year_promotion.xml
item Layout of RecyclerView/ListView/GridView's item item_order_summary.xml
view Layout of Custom Views view_counter.xml
layout xml included layouts layout_no_result.xml

id

<what>_<description> (camelCase)

what description sample
textView welcome message tvWelcome
button add to favorite btnAddFavorite
recyclerView size option list rvSelectSize
relativeLayout main container of dialog rlContainer
layout included layout for no result layoutNoResult
imageView user profile image ivAccountProfile
swipeRefreshLayout refresh product listing srlProductList

/drawable

<what>_<where>_<description>_<variant> (snake_case)

what where description variant (optional) sample
icon catogory menu no result - ic_category_menu_no_result.xml
icon everywhere info - ic_common_info.xml
shape everywhere button background orange bg_common_button_orange.xml
icon everywhere search black 24dp ic_common_search_black_24dp.xml
selector search result campaign tag - selector_search_result_campaign.xml

dimen

<what>_<where>_<size> (snake_case)

what where (optional) size (optional) sample
padding - 16dp padding_16dp
margin - 8dp margin_8dp
text size - medium text_size_medium
size catogory menu image - size_category_menu_image
height similar product item - height_similar_product_item
radius common card view - radius_card_view

Const

Element Field Name Prefix
SharedPreferences PREF_
Bundle BUNDLE_
Fragment Arguments ARGUMENT_
Intent Extra EXTRA_
Intent Action ACTION_

Source files

  • Android related files: ***Activity.java, ***Fragment.java, ***BroadcastReceiver.java, ***Service.java, ***Dialog.java, and etc. i.e: NoteDetailsActivity.java, NoteDetailsFragment.java, or MusicPlayerService.java.
  • Utils: Multiple specific utility files are better than one general one. We may have TimeUtils.java, StringUtils.java, ViewUtils.java, NetworkUtils.java instead of only one huge Utility.java.

Styles view components

styles содержит стили для элементов следует задавать по общему правилу [{View}].{Цвет}.{Шрифт}.{Размер} например <style name="TextView.Grey.Regular.14.Link">

<style name="TextView.Grey.Regular" parent="android:Widget.TextView">
    <item name="android:fontFamily">@font/sf_pro_display_regular</item>
    <item name="android:textColor">@color/colorGreyText</item>
</style>

 <style name="TextView.Grey.Regular.14">
    <item name="android:textSize">@dimen/font_14</item>
</style>

<style name="TextView.Grey.Regular.14.Link">
    <item name="android:gravity">center</item>
    <item name="android:textColorHighlight">@android:color/transparent</item>
</style>

Структура класса

  1. companion object
  2. Поля: abstract, override, public, internal, protected, private
  3. Блок инициализации: init, конструкторы
  4. Абстрактные методы
  5. Переопределенные методы родительского класса(желательно в том же порядке, в каком они следуют в родительском классе)
  6. Реализации методов интерфейсов(желательно в том же порядке, в каком они следуют в описании класса, соблюдая при этом порядок описания этих методов в самом интерфейсе)
  7. public методы
  8. internal методы
  9. protected методы
  10. private методы
  11. inner классы

#Использование условных операторов Не обрамлять if выражения в фигурные скобки только если условный оператор if помещается в одну строку. При возможности использовать условные операторы, как выражение:

return if (condition) foo() else bar()

У оператора when для коротких выражениях ветвей условия размещать их на одной строке с условием без фигурных скобок:

when (somenCondition) {
        0 -> fooFunction()
        1 -> barFunction()
        else -> exitFunction()
}

У оператора when для блоков с выражениями, которые состоят более чем из одной строки использовать для этих блоков фигурные скобки и отделять смежные case-блоки пустой строкой. Ексли последний блок состоит из одной строки его можно не обрамлять скобками.

when (feed.type) {
        FeedType.PERSONAL -> {
        	with(feed as PersonalFeed) {
        		datePopupStart = dateBegin
        		datePopupEnd = dateEnd
        	}
        }


        FeedType.SUM -> {
        	with(feed as SumFeed) {
        		datePopupStart = dateBegin
        		datePopupEnd = dateEnd
        	}
        }

        FeedType.CARD -> {
        	with(feed as CardFeed) {
        		datePopupStart = dateBegin
        		datePopupEnd = dateEnd
        	}
        }

        else -> Feed.EMPTY
        
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment