処理中を示すビューをつくる(Android)
何か時間のかかる処理をしたり, 処理をしている最中UI を触らせないようにするために, 少し暗くした
Viewなんかを追加して, 「触れないよ」ということを示したりするためのViewを作ります。
(ダイアログとかはではデフォルトでありますが…)。
これは, 単純に暗くなったViewを重ねたものです。通常のレイアウトに, 追加レイアウトのViewを作って重ねます。
はい, ただそれだけです。
1. 暗くなっている部分のViewをつくる
shadow.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#80000000"> </LinearLayout>
background の色だけを付けている単純な, レイアウトです。
2. Activity 上で, Viewとして定義して利用する
public class BlackViewActivity extends Activity { private View blackView; private boolean black=false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); blackView = getLayoutInflater().inflate(R.layout.shadow, null); blackView.setClickable(false); // No? blackView.setVisibility(View.INVISIBLE); addContentView(blackView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if ( !black ) { showBlack(); black = true; } else { hideBlack(); black = false; } return true; default: return super.onOptionsItemSelected(item); } } private void showBlack() { blackView.setVisibility(View.VISIBLE); } private void hideBlack() { blackView.setVisibility(View.INVISIBLE); } }
今回はActionBarを使って, 出し入れしました。
このページには, レイアウトを入れませんでしたが, setContentView で, レイアウトを入れることも可能です。
ボタンの上とか, 画像の上とかにも重ねることができます
ポイントは, View.VISIBLE, View.INVISIBLE で, Viewの見える見えないを調整しているところです。これだけです。
もともとのレイアウトに, addContentView で追加しています。