2013年10月22日火曜日

画面の縦横切り替えでActionBarを含んだ変更

2013/10/22追記
パッケージが異なると動作しない。
同じパッケージなら大丈夫。
原因については未調査。
調査中です。
暫定的にパッケージを分けない方向で回避してます。
intentのフラッグにニュータスクとかシングルトップとかやってみたけどだめだった。
マニフェストでlaunchmodeをシングルインスタンスとかもやってみたけどだめだった。
追記ここまで。

使用した端末のApiは14。Android 4.0です。

横画面にしたらフルスクリーンでタッチしたらActionBarが出るのを作りたい。
そう思わなければよかった。おかげでこんな時間だよ!泣

というわけで、盛り込んだ機能。

縦画面
ActionBar
・・・常に表示
レイアウトのサイズ
・・・ActionBarとStatusBarが含まれる
NavigationBar
・・・くっきり見える

横画面
ActionBar
・・・画面をタッチで表示/非表示。
レイアウトのサイズ
・・・ActionBarやStatusBarが含まれない
NavigationBar
・・・画面をタッチで表示/目立たない

以下ソース。



import android.app.Activity;
import android.app.Fragment;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.WindowManager;

public class RotateActivity extends Activity{
 public static final String TAG = RotateActivity.class.getSimpleName();
 private OnTouchListener mTouchListener = new OnTouchListener() {
  
  @Override
  public boolean onTouch(View v, MotionEvent event) {
   if(event.getAction() == MotionEvent.ACTION_UP){
    Log.d(TAG+"_onTouch_up", "in");
    if(getActionBar().isShowing()){
     getActionBar().hide();
     v.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
    }else{
     getActionBar().show();
     v.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
    }
    return false;
   }
   return true;
  }
 };
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  int orientation = getApplicationContext().getResources().getConfiguration().orientation;
  if(orientation == Configuration.ORIENTATION_PORTRAIT){
   requestWindowFeature(Window.FEATURE_ACTION_BAR);
   getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
   getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
  }else{
   requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
   getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
   getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
   getWindow().getDecorView().setOnTouchListener(mTouchListener);
   getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
   getActionBar().hide();
  }
  String tag = RotateTextureFragment.TAG;
  Fragment fragment = getFragmentManager().findFragmentByTag(tag);
  if(fragment  == null){
   fragment = RotateTextureFragment.getInstance();
   int layoutId = android.R.id.content;
   getFragmentManager().beginTransaction()
   .replace(layoutId, fragment, tag)
   .commit();
  }
 }
}

0 件のコメント:

コメントを投稿