2011-07-18 258 views
0

我想在Android 3.1中隐藏状态栏。 当用户触摸屏幕时,状态栏将会显示,2秒后将自动隐藏。无法隐藏状态栏?

这里我的代码:

private static ViewFlipper flipper = null; 
private static ImageView ivScreenSnapshot = null; 

public static AbsoluteLayout managerField = null; 

public void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    managerField = new AbsoluteLayout(this); 

    flipper = new ViewFlipper(this) 
    { 
     @Override 
     public boolean onTouchEvent(MotionEvent event) 
     { 
      flipper.setSystemUiVisibility(View.STATUS_BAR_VISIBLE); 
      Thread t = new Thread() 
      { 
       public void run() 
       { 
        try { 
         sleep(2000); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
        Global.handler.post(new Runnable() 
        { 
         public void run() 
         { 
          flipper.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); 
         } 
        }); 
       } 
      }; 
      t.start(); 
      return super.onTouchEvent(event); 
     } 
    }; 
    ivScreenSnapshot = new ImageView(this); 
    flipper.addView(managerField); 
    flipper.addView(ivScreenSnapshot); 
    setContentView(flipper); 
    flipper.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); 
} 

它不工作,状态栏始终可见。 有什么建议吗?谢谢!

回答

3

试试这个代码

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="de.vogella.android.temperature" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".Convert" 
       android:label="@string/app_name" 
       android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

</application> 
<uses-sdk android:minSdkVersion="9" /> 
</manifest> 
3

我已经尝试了代码,它完美地工作。为了测试,我在onCreate()中调用了一个线程,并向处理程序发送了一条消息来隐藏状态栏。以下是代码示例。你可以根据你的需要使用它。

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.test); 

    Thread background = new Thread (new Runnable() 
    { 
     public void run() 
     { 
      try 
      { 
       Thread.sleep(4000); 
       progressHandler.sendMessage(progressHandler.obtainMessage()); 

      } 
      catch (InterruptedException e) 
      { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 

    // start the background thread 
    background.start(); 
} 

// handler for the background updating 
Handler progressHandler = new Handler() 
{ 
    public void handleMessage(Message msg) 
    { 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    } 
}; 

那么,在onCreate()中使用Thread是没有必要的。你可以在没有线程的情况下完成。只需调用Thread.Sleep()并将消息发送给Handler即可。我希望你能判断两者的区别。

干杯。

+0

谢谢大家, 我的代码不工作,因为我已经在manfest文件中声明了android:minSdkVersion = 8。 现在,我编辑android:minSdkVersion = 12,它工作正常。 – Levanphong7887