Material Design適応時に標準外のことをしようとした時のメモ


情報整理メモ。随時追加予定

ネットやASのProject Wizardで生成されるテンプレ-ト外のことをやりたかった情報を整理する


Toolbarでbackボタンを実現する

backボタンのリソースを別途用意していないけど、ちょっとしたbackボタンを実現したい場合

AppCompatでToolBarが実装されている場合、後ろ矢印をそのまま流用したいということがある

実装イメージ

//ToolBarを表示
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);

//矢印の表示だけ表示
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

//バック処理の実装
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});

ただ、問題としては

PreferenceActivityみたいなのに 上記のバックボタンを導入したい場合

  • レイアウト上にToolbarを設置するだけではなく
  • AppCompatActivityの継承が必要
    • ただレイアウト上に NavigationDrawerは不要

あたりになるのかなと。

みたいなお話がありますけど、実際はどうなんだろうな・・

混乱した不要な情報

stackOverFlow辺りでググる

mToolbar.setNavigationIcon(R.drawable.ic_back_arrow);

あたりのバックキー画像設定しろやみたいな情報が出てくるんだけど

これ標準同梱されてないよね?? android.R.XX系でないの?? とか凄い悩んでしまったので、

不必要だということでメモっておく


SnackBarを上部に出したい

やりたかったこと

PokemonGoみたいに「GPS探してます」のような上位にSnackBarを出したかった

できなかったこと

  • ToolBarの下にSnackBarを表示
  • その場で消える
    • なぜか上部に抜けて消えていくアニメーション効果が適応されてしまう。。。
    • このアニメ効果置き換える方法ないんだろうか。。

調べたメモ

なお話で

Snackbar snack = Snackbar.make(parentLayout, str, Snackbar.LENGTH_LONG);
View view = snack.getView();
FrameLayout.LayoutParams params =(FrameLayout.LayoutParams)view.getLayoutParams();
params.gravity = Gravity.TOP;
view.setLayoutParams(params);
snack.show();

parentLayout は何のViewでもよくて、これがToolBarでもOKなわけです。

特にToolBar等がない場合は、

findViewById(android.R.id.content)

とか、かならず画面上にあるidを指定すればいいだけのようですが*1

勿論AlertDialog/Toastと同じように

と同じくカスタマイズは可能。アンカー有りToastというイメージが正しいかも。


*1:もちろんレイアウト上のNavigationDrawerとかのid指定してもOK