レイアウトと、ウィンドウの半透明テスト


2014年4月11日現在、私が理解している内容です。
間違っている場合があります。


レイアウトと、ウィンドウで、半透明で画面表示するテスト

今回はandroidの画面表示の挙動の実験です。


レイアウトの背景に色をつけるには、下のようにしました。


L_layout1 = new LinearLayout(this); //新しいレイアウトを作る L_layout1.setBackgroundColor(Color.argb(128, 0, 0, 255)); //背景を半透明の青にする setContentView(L_layout1); //レイアウトを画面にセットする


ウィンドウに色をつけることもできます。


Window win1 = getWindow(); //win1は、このウィンドウのデータ ColorDrawable c; //新しい色のデータをつくる準備 c = new ColorDrawable(0x8800ff00); //半透明で緑色 win1.setBackgroundDrawable(c); //win1の背景色を半透明で緑色にする


ウィンドウに乗っているボタンなどを半透明にすることもできます。


WindowManager.LayoutParams paral; //ウィンドウのパラメータを取得する準備 Window win1 = getWindow(); //win1は、このウィンドウのデータ paral = win1.getAttributes(); //このウィンドウの諸々のパラメータを取得 paral.alpha = 128; //半透明に設定すると、ボタンが半透明になる win1.setAttributes(paral); //win1に、パラメータをセット






AndroidManifest.xmlの確認

今回の実験をする前に、AndroidManifest.xmlに、次の記述があることを、確認しましょう。
ウィンドウを半透明にして、全画面表示にする設定と、
Activity_Sub1アクティビティの設定。


android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" <activity android:label="@string/app_name" android:name=".Activity_Sub1"/>



<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.test02" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"> <activity android:name="com.example.test02.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="@string/app_name" android:name=".Activity_Sub1"/> </application> </manifest>




半透明のテストいろいろ

アクティビティの画面遷移のこととか」のコードを改造した実験です。
「GO BACK」ボタンを押すと、青いActivity_Sub1画面のレイアウトのサイズが小さく変わります。
端末の「戻る」キーで、Activity_Sub1画面が消えます。

setBackgroundDrawable()は、ウィンドウの背景色を指定しています。
setBackgroundColor()は、setContentViewで指定した画面のレイアウトの背景色を指定しています。

ちなみに、android2.3.3のエミュレータでは重なって見えますが、
android4.4.2のエミュレータでは、青い画面が表示された時、下の赤画面が消されるみたいですので、
重なって見えることがありません。
実際にアプリにするときは、半透明のアクティビティを重ねないように注意が必要ですね。


Activity_Sub1画面のウィンドウの緑背景の一部に、レイアウトの青背景が半透明表示。
ウィンドウに設定したsetBackgroundDrawableを有効。
レイアウトに設定したsetBackgroundColorを有効。



Activity_Sub1画面の、レイアウトの青背景のみ半透明表示。
Windowで指定したsetBackgroundDrawableを削除。
ウィンドウに設定したsetBackgroundDrawableを無効。
レイアウトに設定したsetBackgroundColorのみ有効。



Activity_Sub1画面のウィンドウの緑背景のみ半透明表示。
ウィンドウに設定したsetBackgroundDrawableのみ有効。
レイアウトに設定したsetBackgroundColorを無効。



Activity_Sub1画面のボタンのみ表示。
ウィンドウに設定したsetBackgroundDrawableを無効。
レイアウトに設定したsetBackgroundColorを無効。



Activity_Sub1.java

package com.example.test02; import android.app.Activity; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.LinearLayout; public class Activity_Sub1 extends Activity { private LinearLayout L_layout1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //----------------------------------------- //ウィンドウのボタンなどを半透明 WindowManager.LayoutParams paral; //ウィンドウのパラメータを取得する準備 Window win1 = getWindow(); //win1は、このウィンドウのデータ paral = win1.getAttributes(); //このウィンドウの諸々のパラメータを取得 paral.alpha = 128; //半透明に設定すると、ボタンが半透明になる win1.setAttributes(paral); //win1に、パラメータをセット //---------------------------------------- //ウィンドウの背景色を指定 ColorDrawable c; //新しい色のデータをつくる準備 c = new ColorDrawable(0x8800ff00); //半透明で緑色 win1.setBackgroundDrawable(c); //win1の背景色を半透明で緑色にする //----------------------------------------- //レイアウトの半透明 //新しいレイアウトを作る L_layout1 = new LinearLayout(this); //レイアウトを画面にセットする setContentView(L_layout1); //レイアウトの背景を青にする L_layout1.setBackgroundColor(Color.argb(128, 0, 0, 255)); //これを指定しない時はボタンだけ表示される //----------------------------------------- //新しいボタンを作る Button button1 = new Button(this); //ボタンに文字を表示 button1.setText("GO BACK"); //ボタンをレイアウトに追加 L_layout1.addView(button1); //----------------------------------------- //ボタンの位置を調整 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); layoutParams.setMargins(100, 50, 0, 0); button1.setLayoutParams(layoutParams); //----------------------------------------- //ボタンが押されたかどうか監視する button1.setOnClickListener( new OnClickListener() { //ボタンが押されたら何かする @Override public void onClick(View v) { //この画面を終了 //finish(); //レイアウトのサイズを変えてみる L_layout1.layout(100, 200, 400, 700); } }); //----------------------------------------- } }


MainActivity.java

package com.example.test02; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.app.Activity; import android.content.Intent; import android.graphics.Color; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //----------------------------------------- //新しいレイアウトを作る LinearLayout L_layout1 = new LinearLayout(this); //レイアウトを画面にセットする setContentView(L_layout1); //レイアウトの背景を赤にする L_layout1.setBackgroundColor(Color.argb(128, 255, 0, 0)); //----------------------------------------- //新しいボタンを作る Button button1 = new Button(this); //ボタンに文字を表示 button1.setText("CHANGE"); //ボタンをレイアウトに追加 L_layout1.addView(button1); //----------------------------------------- //ボタンが押されたかどうか監視する button1.setOnClickListener( new OnClickListener() { //ボタンが押されたら何かする @Override public void onClick(View v) { //インテントに、この画面と、遷移する別の画面を指定する Intent intent = new Intent(MainActivity.this, Activity_Sub1.class); //インテントで指定した別の画面に遷移する startActivity(intent); } }); //----------------------------------------- } }














戻る