I want to design the Android App that will change the status bar of Android device as App opens like in iOS 7.
Can we make status bar changeable in Android?
Basically, no, the status bar in itself cannot be changed in Android by an application.
I guess that to be able to do that you'd need to make a custom ROM or maybe dive into the AOSP and find a way to do that on rooted phones.
I am working on an app which will be installed on tablets placed in public places like corners, shops. I want to hide the system navigation bar for restricting users from playing around in tablet. Is there any way to do this either programmatically or some other way?
I think there is already an answer to your question here: Is there a way to hide the system/navigation bar in Android ICS
I will just add that on some devices SYSTEM_UI_FLAG_HIDE_NAVIGATION does not work in that case you need to change some configurations in android itself to add the feature or maybe you can use ile's answer.
I will give my ICS tablets for users to complete a survey so I would like the user to work with my app only. They should not be able to switch to the home screen, press back buttons etc., so I would like to hide the system bar completely.
My tablet is rooted and I know some application like
this can help me, but I don't need all the extra functions of this app.
I found this tutorial that could help me, but if I can add the code to do my own, it would be great.
After a lot of searching on the internet, I managed to get the System Bar to hide and appear in a 4.2 device using:
To Hide:
Runtime.getRuntime().exec("service call activity 42 s16 com.android.systemui");
Or use 79 instead of 42 for API less than 14. You may also need to include the SET_DEBUG_APP permission, in which case you need to have the application signed with the system key or installed in the /system/app/ directory.
To Show:
Runtime.getRuntime().exec("am startservice --user 0 -n com.android.systemui/.SystemUIService");
Alternatively some people have used the -a (instead of -n) option, though this was causing an error on my device:
Error: Not found; no service started.
For Android 4.4, there is a new feature called immersive mode which hides both the system and status bars. The system UI is toggled by the user through the use of an edge swipe from the top or bottom of the screen. For more details take a look at:
http://developer.android.com/reference/android/view/View.html#setSystemUiVisibility(int)
Using new IMMERSIVE mode in android kitkat
For example:
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE)
HideBar has a kiosk mode especially for this use case.
A free download is available at http://ppareit.github.com/HideBar/.
You can also find it in the market at https://play.google.com/store/apps/details?id=be.ppareit.hidebar.
If you want to incorporate it in your own test/survey application you can always contact the developer (see the links for an email). The code could be explained or an Intent to do the hiding could be provided.
check this link: (requires root)
http://android.serverbox.ch/?p=306
similar question was posted here also:
Is there a way to hide the system bar in Android 3.0? It's an internal device and I'm managing navigation
or try HideBar
http://ppareit.github.com/HideBar/
Actually you can simply put the system bar in "lights out" mode, the system bar buttons and notifications gets dimmed.
View v = findViewById(R.id.view_id);
v.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
I want to add some information to the existing replies hoping it will be useful for someone.
To get a real full screen working on my low cost China tablets I need to edit a file located in
system/build.prop
replace the text
ro.property.tabletUI=true
with
#ro.property.tabletUI=true
(I comment the line). After that, I can get a full screen using
android:theme="#android:style/Theme.Black.NoTitleBar.Fullscreen"
for each activity in the minfest.xml
This solution Is good only if you sell tablets with your application and needs root privileges to edit the system/build.prop. So it's not a solution for all, so please do not downvote this little contribute.
EDIT:
I noticed that my tablets have hardware buttons (Home, menĂ¹ and back) on the frames. So Android lets me to hide the system bar. I tryed with other tablets that haven't hardware buttons without success.
Google intends Android to be used for consumers only. They integrated the System UI bar more tightly into Android ICS (4.0) to prevent people from rooting the device and killing the bar that way. Attempting to delete the system bar process will prevent the OS from booting fully.
If you want to restrict users from accessing the home screen, then you are out of luck with Android ICS. I would suggest finding a tablet manufacture who will preload the device with Android 2.3. Either that, or use a rooted Android 3.x device.
If you intend to use Android for kiosk or locked down devices, then you would be better off targeting an OS that is a bit more open.
I found a solution that, in my use case, works like a charm by hiding the menu bar even on a NOT ROOTED device:
setting this flag
layoutparams.flags = 0x80000000 | layoutparams.flags;
to my window's layout parameters simply does the trick!
Here's the complete snippet i used:
Window window = getWindow();
android.view.WindowManager.LayoutParams layoutparams = window.getAttributes();
layoutparams.flags = 0x80000000 | layoutparams.flags;
window.setAttributes(layoutparams);
in my Activity onCreate.
To find out this I reverse engeneered a non-system Apk I found that was somehow able to do that.
According to the official documentation:
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
that "0x80000000" is the FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS introduced as a system constant in Api level 21, and it basically indicates that "this Window is responsible for drawing the background for the system bars." and since i'm not manually drawing any system bar, no menu bar is shown.
I only tested this on a pair of Moverio BT-200 running Android ICS 4.0.3 because that is the device i'm currently working on and also because right now i don't have other device running Api levels prior to 19 under my hands to test it.
There is a workaround to disable menu bar (not hide) in all most all tablets without rooting. But this is bit tricky, but it works clean. Several well known apps in the market at the moment using this strategy to achieve this disable menu bar feature for their apps.
Grant admin privilege (need one time user involvement to activate).
Set password & lock the device using device admin profile api programatically.
Then load what ever the UIs on top of the native lock screen. (Of course this will show background lock screen whenever a transition happens between activities. But if logic is organized well, then it will be smooth & less noticed by the user)
When need to enable back, reset password to "" using resetPassword("", 0) of device policy manager object.
To complement the answers already given, and in case it is useful for someone needing a similar behaviour, there is this tutorial for android devices 4.0 and higher, it tells you how to hide the navigation bar and the status bar (they will reappear when the screen is touched again):
https://developer.android.com/training/system-ui/navigation.html
I realize it is not what you need exactly, but might be useful for someone else looking at this problem.
I have an Android app that uses the NotificationManager to inform the user of certain events. When I call .notify(), the icon I specify is shown in the status bar. It works fine on various Android 2.2 and 2.3 phones. But on a Galaxy Tab 10.1 running Android 3.1 the notification icon on the status bar is so dim it can barely be seen. I've seen one other app that has a similar problem, but all the other apps I'm using that do notifications look OK. I've followed the Guidelines at http://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html, including creating Android 2.3+ style icons and putting them in the drawable-hdpi-v9, drawable-mdpi-v9, etc. folders. The icons all look OK when I look at them on my development machine; they are the right colors and are not dim. What could I be doing wrong that is causing my notification icon to be shown so dim on the Honeycomb status bar?
As of today there is updated documentation available at the android developers web site:
http://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html
I need to compensate for the lack of a physical (or even a "soft") menu button on Android 3 tablets. The app I'm working on generally hides the title bar for its activities, but I can't do that if I want the action bar to appear on a tablet. Is there something in the API that I can use to determine whether a device has a menu button?
If I can't find such a function, the only thing I can think of to do is to never hide the title bar on Android 3.0 and later, but that bothers me for two reasons:
I believe Android 3.0 (or a later API) will eventually support phones, which will probably have menu buttons
I would prefer not to hard code that SDK version (perhaps I could never hide the title bar for Android 3.0 and above, but then I run the risk of not hiding the title bar on phones)
LeffelMania has the right idea, but there is a caveat: If you target SDK 11 (3.0) and use a no-title-bar theme or override with a custom title of some sort, you will be just plain menu-less, because on Honeycomb devices with the target set to 11 the options-menu lives in the title bar itself instead of a fake menu button in the bottom status bar. So be careful there! (You can work around this by setting a lower target, or targeting style resources to v11 to use a one of the Holo themes with a titlebar in that case).
DEPRECATED: This answer is no longer accurate, given changes to the Android framework and design guidelines.
Android phones are guaranteed to have a Menu button. All phones pre-Honeycomb have Menu buttons, and Honeycomb features an ever-present software button. If you use the proper callbacks that tie into the Menu button (onCreateOptionsMenu(), onOptionsItemSelected(), etc) you will be safe to receive those callbacks on any device running Android.
As of API level 14, ViewConfiguration.hasPermanentMenuKey() is available to indicate whether a permanent menu key is present.