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 - замена - на _ |
// Slide up animation | |
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > | |
<translate | |
android:duration="@android:integer/config_mediumAnimTime" | |
android:fromYDelta="100%" | |
android:interpolator="@android:anim/accelerate_interpolator" | |
android:toXDelta="0" /> |
// 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; |
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(); |
/* | |
* Copyright 2015 Yuriy Mysochenko | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software |
import android.content.Context; | |
import android.content.pm.PackageInfo; | |
import android.content.pm.PackageManager; | |
import android.content.pm.PackageManager.NameNotFoundException; | |
import android.content.pm.Signature; | |
public class TamperCheck { | |
//we store the hash of the signture for a little more protection | |
private static final String APP_SIGNATURE = "1038C0E34658923C4192E61B16846"; |
// Example | |
fun expandAdapterDelegate() = adapterDelegateLayoutContainer<ExpandedItem, DisplayableItem>(R.layout.item_expanded) { | |
llArrowContainer.setOnClickListener { | |
val isExpand = !item.isExpanded | |
item.isExpanded = isExpand | |
expandText(isExpand, ivArrow, llTextContainer) | |
} | |
bind { |
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 |
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 |
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() |