処理中を示すビューをつくる(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 で追加しています。

