便利ですよね.
なんでも, 下調べは大事です.
便利ですよね.
なんでも, 下調べは大事です.
よくある画面要素の組み合わせ ActionBar + RecyclerView + FAB.
ActionBar 部分をスクロール時に上にスライドさせて消したいですよね!
まずは CoordinatorLayout で囲みます.
レイアウトはこんなかんじの構成ですね.
<CoordinatorLayout>
<AppBarLayout>
<Toolbar />
</AppBarLayout>
<RecyclerView />
<FloatingActionButton />
</CoordinatorLayout>
ここでは, 連携する挙動の始まりとなる「きっかけ」を RecyclerView のスクロールとしましたが, 以下の View や Layout は, デフォルトで同様に「きっかけ」にすることができます.
HorizontalGridView
NestedScrollView
RecyclerView
SwipeRefreshLayout
VerticalGridView
NestedScrollingChild | Android Developers
よく画面をみてみると, RecyclerView の最上段をみることができないようになってますね!
それは, CoordinatorLayout は FrameLayout だからです.
CoordinatorLayout is a super-powered FrameLayout.
CoordinatorLayout | Android Developers
でも, とりあえず無視します.
次に, アクションバー部分が「きっかけ」に反応して「ふるまう」するようにします.
AppBarLayout または Toolbar に, 属性「app:layout_behavior」をつけて, 「ふるまう」時の挙動を追加したくなります.
でも, 必要なかったりします.
ふるまいを記述する Behavior は, デフォルトですで に AppBarLayout にアノテーションを利用してセットされているからです.
@CoordinatorLayout.DefaultBehavior(AppBarLayout.Behavior.class)
public class AppBarLayout extends LinearLayout {
Cross Reference: AppBarLayout.java
なので, ふるまい方の種類だけをその子である Toolbar 記述します.
<CoordinatorLayout>
<AppBarLayout>
<Toolbar
app:layout_scrollFlags="scroll|enterAlways" />
</AppBarLayout>
<RecyclerView />
<FLoatingActionButton />
</CoordinatorLayout>
ここで, 動かしてみます.
アクションバーが消えていくようになりましたね!
最後に, RecyclerView 自体も「ふるまわ」せます.
AppBarLayout のふるまい方と同じふるまい方をするように同じ Behavior をセットします.
<CoordinatorLayout>
<AppBarLayout>
<Toolbar
app:layout_scrollFlags="scroll|enterAlways" />
</AppBarLayout>
<RecyclerView
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<FLoatingActionButton />
</CoordinatorLayout>
ここでいきなり現れた文字列 @string/appbar_scrolling_view_behavior は, デフォルトでセットされている
android.support.design.widget.AppBarLayout$ScrollingViewBehavior
のことです.
AppBarLayout にデフォルトで設定されているものと同じですね.
ここで, また動かしてみます.
AppBarLayout の Behavior と同じものを RecyvlerView にもセットしたので, 同じように動きます.
スクロール時にAppBarと同じように開閉スライドすることになるので, RecyclerView との重なり合いがなくなり RecyclerView の最上段も表示されるようになりましたね!
実際の簡略化していないレイアウトを貼っておきます.
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="@string/app_name"
app:layout_scrollFlags="scroll|enterAlways" />
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:layout_marginBottom="16dp"
android:layout_gravity="right|bottom"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
以上のように, レイアウトファイルだけを編集するだけで, インタラクティブな挙動を画面の要素たちに行わせることができるので, 便利な気もしますね!!
エンジニアの年収データをスプレッドシートに記入させて集めているようです.
Why not just a simple spreadsheet of salaries? | Hacker News
アンケートフォームから入力すると, スプレッドシートに記入されて公開されます.
このデータはCSV形式で抽出できるのでそれを利用してあれこれやっております.
Data Visualization of Hacker News Salary Spreadsheet — Medium
その結果視覚的にいろいろわかりやすくなって, あきらかにヨーロッパに比べてのシリコンバレーの年収は高いようです.
勤務年数や経験年数は関係なく, 最初から, 2~3倍の年収の違いが見えます.
優秀な人が集ってこうなるのか, お金があるから優秀な人が集まるのか, 都市別.
これだけインターネットが発達してリモートな開発がしやすくなりましたが, ここまで差がでるとな.
まあ, それなりに狭い分母だとは思いますが.