https://learnui.design/blog/ios-vs-android-app-ui-design-complete-guide.html
<what>_<where> (snake_case)
what | where | sample |
---|---|---|
activity | Content View of Activity | activity_splash.xml |
package com.zakrodionov.commonApp.app.platform | |
import android.content.BroadcastReceiver | |
import android.content.Context | |
import android.content.Intent | |
import android.content.IntentFilter | |
import android.net.ConnectivityManager | |
import android.net.Network | |
import android.os.Build | |
import androidx.core.content.ContextCompat.getSystemService |
fun Activity.hideKeyboardOnClickOutsideEditText(view: View) { | |
// Set up touch listener for non-text box views to hide keyboard. | |
var previousAction = 0 | |
val onTouchListener = View.OnTouchListener { v, event -> | |
if (currentFocus != null | |
&& event.action != MotionEvent.ACTION_DOWN | |
&& event.action != MotionEvent.ACTION_MOVE | |
&& previousAction != MotionEvent.ACTION_MOVE | |
) { | |
currentFocus?.clearFocus() |
/* | |
SampleAuthenticator (c) by Farhan Khan | |
SampleAuthenticator is licensed under a | |
Creative Commons Attribution 3.0 Unported License. | |
http://creativecommons.org/licenses/by/3.0/ | |
*/ | |
class SampleAuthenticator( |
https://learnui.design/blog/ios-vs-android-app-ui-design-complete-guide.html
<what>_<where> (snake_case)
what | where | sample |
---|---|---|
activity | Content View of Activity | activity_splash.xml |
for f in *\ *; do mv "$f" "${f// /_}"; done --удаляет пробелы в названии файлов | |
for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done; ---делает lowercase | |
rename 's/[\(\)]//g' *.txt переименует все файлы .txt, удалив круглые скобки. | |
rename 's/[\-]//g' *.jpg удалив минус(-). | |
for file in *; do mv "$file" `echo $file | tr '-' '_'` ; done - замена - на _ |
class AddressesSpinnerAdapter( | |
context: Context, | |
textViewResourceId: Int = android.R.layout.simple_spinner_item | |
) : ArrayAdapter<AddressesSpinnerItem>(context, textViewResourceId) { | |
var values: ArrayList<AddressesSpinnerItem> = arrayListOf() | |
set(value) { | |
field.clear() | |
field = value | |
notifyDataSetChanged() |
class HorizontalPaddingDecoration( | |
private val padding: Float = 2f, | |
private val firstLastPadding: Float = 20f | |
) : RecyclerView.ItemDecoration() { | |
override fun getItemOffsets( | |
outRect: Rect, | |
view: View, | |
parent: RecyclerView, | |
state: RecyclerView.State |
// Example | |
fun expandAdapterDelegate() = adapterDelegateLayoutContainer<ExpandedItem, DisplayableItem>(R.layout.item_expanded) { | |
llArrowContainer.setOnClickListener { | |
val isExpand = !item.isExpanded | |
item.isExpanded = isExpand | |
expandText(isExpand, ivArrow, llTextContainer) | |
} | |
bind { |
package com.kevicsalazar.utils; | |
import android.animation.AnimatorSet; | |
import android.animation.ObjectAnimator; | |
import android.view.View; | |
public class AnimationUtils { | |
// Attention | |
public static AnimatorSet loadBounceAnimator(View target) { | |
AnimatorSet animatorSet = new AnimatorSet(); |
// example courtesy of http://adilatwork.blogspot.com/2012/11/android-dialogfragment-enter-and-exit.html | |
// file location: src/main/java/com/example/ | |
@Override | |
public void onStart() { | |
super.onStart(); | |
// safety check | |
if (getDialog() == null) { | |
return; |