Android splash screen jump java - java

I wanted to implement a splash screen but in a correct way - no superficial delay, only showing it while the app is doing some real work. So I googled a lot and found following solution: I apply theme to SplashActivity, procced with the logic and open next activity. The problem is that splash screen jumps a little bit. Tried different options - fullscreen, no action bar for splash, no action bar for splash and following activity, android:windowDrawsSystemBarBackgrounds true\false and several others. If I set delay for 115-150 millisecs then 9 cases out of 10 there is no jump. The question is how to get rid of the jump and keep splash screen lean.
SplashActivity:
public class SplashActivity extends CheckForInternetActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
routeActivity();
}
AndroidManifest:
<activity
android:name="ru.awac.CBoRrates.SplashActivity"
android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"
android:theme="#style/AppTheme.SplashScreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
styles.xml:
<style name="AppTheme.SplashScreen" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">#drawable/splash_screen</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
splash_screen:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="#android:color/white"/>
<item>
<bitmap
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:layout_margin="5dip"
android:src="#drawable/awac_presents_transparent_1" />
</item>
</layer-list>
awac_presents_transparent_1 is just a png
Youtube video of the jump

Related

How to create a switching app in android like google translator (dialog over native screen)

I am a beginner to android development and I am trying to make something like this in my application.
I found a great question and an answer related to my issue here Android - How to display a dialog over a native screen?. But, it didn't work as expected. May be I am doing something wrong.
I am attaching the code that I am using to achieve this. Any help would be highly appreciated and if any one can guide me in the right direction that I can follow.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.myapp.MainActivity">
</android.support.constraint.ConstraintLayout>
style.xml
<resources>
<!-- Base application theme. -->
<style name="myTheme" parent="android:style/Theme.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">#null</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:background">#android:color/transparent</item>
</style>
</resources>
MainActivity.java
public class MainActivity extends Activity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AlertDialog LDialog = new AlertDialog.Builder(getApplicationContext())
.setTitle("Call Blocked")
.setMessage("Call Blocked, reroute call?")
.setPositiveButton("ok", null).create();
LDialog.show();
}
}
AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:roundIcon="#mipmap/ic_launcher_round"
android:supportsRtl="true"
android:launchMode="singleInstance" android:excludeFromRecents="true"
android:taskAffinity="" android:theme="#android:style/Theme.Dialog">
...............
...............
</application>
Here, what I am getting now.
Answering the own question because I found the concept that I need to use. It is FAB or Floating Action Button as described here https://developer.android.com/guide/topics/ui/floating-action-button. Also, facebook uses the same concept with the name facebook chat heads.

WindowExitTransition always fades views

I am currently trying to make a SharedElementTransition between two Activitys, which works mostyl fine, except one thing.
The ExitAnimation of the first activity consists of two slide transitions:
activity_main_transition.xml:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:transitionOrdering="together">
<slide android:slideEdge="bottom" android:duration="#integer/anim_duration">
<targets>
<target android:targetId="#+id/bottom_appbar"/>
<target android:targetId="#+id/fab"/>
</targets>
</slide>
<slide android:slideEdge="top" android:duration="#integer/anim_duration">
<targets>
<target android:targetId="#+id/pager"/>
</targets>
</slide>
</transitionSet>
But when the Transition plays the views not only slides, but also fades, also the transition tooks roughly a third of the time specified in the duration. I also checked while debugging and the Transitionset which got played is the one i described above. The other three transitions are working just fine, even though i use the same transition file for the enter and exit transition, so i don't have any idea what is causing this behavior.
Also some additional code:
styles.xml:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
...
<item name="android:windowContentTransitions">true</item>
<item name="android:windowExitTransition">#transition/activity_main</item>
<item name="android:windowEnterTransition">#transition/activity_main</item>
</style>
Manifest.xml:
...
<activity
android:name=".ui.activitys.MainActivity"
android:theme="#style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
...
How i start the new activity:
TextView sharedText = v.findViewById(R.id.txt_name);
String transition = ViewCompat.getTransitionName(sharedText);
ActivityOptions options = ActivityOptions.
makeSceneTransitionAnimation(getActivity(), sharedText, transition);
Intent i = new Intent(getContext(), ActivityCustomer.class);
i.putExtra("id", item.getId());
i.putExtra("title", item.getName1()+" "+item.getName2());
i.putExtra(Constants.EXTRA_TRANSITION_NAME, transition);
Transition t = getActivity().getWindow().getExitTransition();
startActivity(i, options.toBundle());

Splash screen still exist in next activity android

I created a splash screen due to this tutorial: Splash Screen right way
But I have a problem that the splash screen always on display when I create new activity
It just cover the whole activity layout, is there anyway to remove it? I'm new to Android. I dont know how to search this problem on Google. Please help.
IMO, this is the best tutorial for splash screens
create a drawable background_splash
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="#color/gray"/>
<item>
<bitmap
android:gravity="center"
android:src="#mipmap/ic_launcher"/>
</item>
add theme
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">#drawable/background_splash</item>
</style>
add to you manifiest
<activity
android:name=".SplashActivity"
android:theme="#style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
add splash activity that forwards to your main activity
public class SplashActivity extends AppCompatActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}
I think you should replace your main application with splash theme. So Please separate your main application theme and your splash theme.
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#color/colorPrimary</item>
<item name="colorPrimaryDark">#color/colorPrimaryDark</item>
<item name="colorAccent">#color/colorAccent</item>
</style>
// Splash Theme
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">#drawable/splash</item>
</style>
Change Theme in XML

Android - Prevent white screen at startup

As we all know, many Android apps display a white screen very briefly before their first Activity comes into focus. This problem is observed in the following cases:
Android apps that extend the global Application class and
perform major initializations therein. The Application
object is always created before the first Activity (a fact that can
be observed in the debugger), so this makes sense. This is the cause of the delay in my case.
Android apps that display the default preview window before the splash screen.
Setting android:windowDisablePreview = "true" obviously does not work here. Nor can I set the parent theme of the splash screen to Theme.Holo.NoActionBar as described here, because [unfortunately] my splash screen makes use of an ActionBar.
Meanwhile, apps that do not extend the Application class do not show the white screen at startup.
The thing is, ideally the initializations performed in the Application object need to occur before the first Activity is shown. So my question is, how can I perform these initializations on app startup without using an Application object? Possibly using a Thread or Service, I suppose?
This is an interesting problem to think about. I can't bypass it the usual way (by setting the NoActionBar theme), as tragically my Splash screen actually has an ActionBar due to some unrelated reasons.
Note:
I have already referred to the following questions:
How To fix white screen on app Start
up?
Android splash screen is white in the
beginning?
White screen before
splashscreen
White background when Android app start up
Why there is a white screen appears for 1sec when starting to run the apps in Android?
References:
Patterns – Launch screens.
Branded launch screen: the new splash for Android.
Splash Screens the Right Way.
please add this line into your app theme
<item name="android:windowDisablePreview">true</item>
for more information : https://developer.android.com/topic/performance/vitals/launch-time#themed
The problem with white background is caused because of android's cold start while the app loads to memory, and it can be avoided with this:
public class OnboardingWithCenterAnimationActivity extends AppCompatActivity {
public static final int STARTUP_DELAY = 300;
public static final int ANIM_ITEM_DURATION = 1000;
public static final int ITEM_DELAY = 300;
private boolean animationStarted = false;
#Override
protected void onCreate(#Nullable Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_onboarding_center);
}
#Override
public void onWindowFocusChanged(boolean hasFocus) {
if (!hasFocus || animationStarted) {
return;
}
animate();
super.onWindowFocusChanged(hasFocus);
}
private void animate() {
ImageView logoImageView = (ImageView) findViewById(R.id.img_logo);
ViewGroup container = (ViewGroup) findViewById(R.id.container);
ViewCompat.animate(logoImageView)
.translationY(-250)
.setStartDelay(STARTUP_DELAY)
.setDuration(ANIM_ITEM_DURATION).setInterpolator(
new DecelerateInterpolator(1.2f)).start();
for (int i = 0; i < container.getChildCount(); i++) {
View v = container.getChildAt(i);
ViewPropertyAnimatorCompat viewAnimator;
if (!(v instanceof Button)) {
viewAnimator = ViewCompat.animate(v)
.translationY(50).alpha(1)
.setStartDelay((ITEM_DELAY * i) + 500)
.setDuration(1000);
} else {
viewAnimator = ViewCompat.animate(v)
.scaleY(1).scaleX(1)
.setStartDelay((ITEM_DELAY * i) + 500)
.setDuration(500);
}
viewAnimator.setInterpolator(new DecelerateInterpolator()).start();
}
}
}
layout
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?colorPrimary"
android:orientation="vertical"
>
<LinearLayout
android:id="#+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical"
android:paddingTop="144dp"
tools:ignore="HardcodedText"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:alpha="0"
android:text="Hello world" android:textAppearance="#style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"
android:textColor="#android:color/white"
android:textSize="22sp"
tools:alpha="1"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:alpha="0"
android:gravity="center"
android:text="This a nice text"
android:textAppearance="#style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle.Inverse"
android:textSize="20sp"
tools:alpha="1"
/>
<Button
android:id="#+id/btn_choice1"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:scaleX="0"
android:scaleY="0"
android:text="A nice choice"
android:theme="#style/Button"
/>
<Button
android:id="#+id/btn_choice2"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:scaleX="0"
android:scaleY="0"
android:text="Far better!"
android:theme="#style/Button"
/>
</LinearLayout>
<ImageView
android:id="#+id/img_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="#drawable/img_face"
tools:visibility="gone"
/>
</FrameLayout>
img face
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="?colorPrimary"/>
<item>
<bitmap
android:gravity="center"
android:src="#drawable/img_face"/>
</item>
Add this theme to your splashscreen in the manifest
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#color/colorPrimary</item>
<item name="colorPrimaryDark">#color/colorPrimaryDark</item>
<item name="colorAccent">#color/colorAccent</item>
<item name="android:windowBackground">#null</item>
</style>
<style name="AppTheme.CenterAnimation">
<item name="android:windowBackground">#drawable/ll_face_logo</item>
</style>
which will produce efect like this
for more details and more solutions you can check this
BlogPost
Recommended way of solving this problem is missing in the answers. So I am adding my answer here. The white-screen-at-startup problem occurs because of the initial blank screen that the system process draws when launching the app. A common way to solve this is by turning off this initial screen by adding this to your styles.xml file.
<item name="android:windowDisablePreview">true</item>
But according to android documentation this can result in longer startup time. Recommended way of avoiding this initial white screen according to google is to use activity's windowBackground theme attribute and provide a simple custom drawable for the starting activity.
Like this:
Drawable Layout file, my_drawable.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
<!-- The background color, preferably the same as your normal theme -->
<item android:drawable="#android:color/white"/>
<!-- Your product logo - 144dp color version of your app icon -->
<item>
<bitmap
android:src="#drawable/product_logo_144dp"
android:gravity="center"/>
</item>
</layer-list>
Create a new style in your styles.xml
<!-- Base application theme. -->
<style name="AppTheme">
<!-- Customize your theme here. -->
</style>
<!-- Starting activity theme -->
<style name="AppTheme.Launcher">
<item name="android:windowBackground">#drawable/my_drawable</item>
</style>
Add this theme to your starting activity in the Manifest file
<activity ...
android:theme="#style/AppTheme.Launcher" />
And when you want to transition back to your normal theme call setTheme(R.style.Apptheme) before calling super.onCreate() and setContentView()
public class MainActivity extends AppCompatActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
// Make sure this is before calling super.onCreate
setTheme(R.style.Theme_MyApp);
super.onCreate(savedInstanceState);
// ...
}
}
This is the recommended way to solve the problem and this is from google Material Design patterns.
Please copy and paste these two lines in your manifest app theme i.e res/styles/AppTheme. then it will work like charm..
<item name="android:windowDisablePreview">true</item>
<item name="android:windowIsTranslucent">true</item>
First of all, to remove the white screen read this - https://www.bignerdranch.com/blog/splash-screens-the-right-way/
But more importantly, optimize your initial load and defer any heavy work to when you have time to run it. Post your application class here if you want us to take a look at it.
Have you tried setting theandroid:windowBackground attribute in the theme of your launcher activity, to either a color or a drawable?
For example this:
<item name="android:windowBackground">#android:color/black</item>
when added to the Launcher activity theme will show a black color (rather than the white color) on startup. This is an easy trick to hide long initialisation, while showing your users something, and it works fine even if you subclass the Application object.
Avoid using other constructs (even Threads) for doing long initialisation tasks, because you may end up not being able to control the lifecycle of such constructs. The Application object is the correct place for doing exactly this type of actions.
I added the following two lines in my theme
under styles.xml
<item name="android:windowDisablePreview">true</item>
<item name="android:windowBackground">#null</item>
Worked like a charm
I had same issue, you have to update your style.
style.xml
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="drawerArrowStyle">#style/DrawerArrowStyle</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowDisablePreview">true</item>
<item name="android:windowBackground">#null</item>
<item name="android:windowIsTranslucent">true</item>
</style>
Your manifest file should looks like below.
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme">
// Other stuff
</application>
Outout:
Hope this would help you.
Within the lifecycle callback methods, you can declare how your activity behaves when the user leaves and re-enters the activity. Remember that the way Android is designed, there is a lifecycle for each and every app. If you put too much load to the onCreate() method (which is the method used to load the layout files and initalise any controls you have in it), then the white screen will become more visible, as the layout file will take longer to load.
I suggest using several different methods when starting an activity. Such are the onStart() (being called as the first thing once the app is loaded), onActivityCreated() (being called after the layout is displayed and useful if you are making any data processing upon starting the activity).
To make it easier for you, below is the official activity lifecycle diagram (from http://web.archive.org/web/20140218132043/http://developer.android.com/training/basics/activity-lifecycle/starting.html):
Please try this once.
Create a drawable file splash_background.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#color/{your color}" />
<item>
<bitmap
android:layout_width="#dimen/size_250"
android:layout_height="#dimen/size_100"
android:gravity="center"
android:scaleType="fitXY"
android:src="{your image}"
android:tint="#color/colorPrimary" />
</item>
</layer-list>
Put this in styles.xml
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">#drawable/splash_background</item>
</style>
In your AndroidMainfest.xml set the above theme to Launch activity.
<activity
android:name=".SplashScreenActivity"
android:screenOrientation="portrait"
android:theme="#style/SplashTheme"
android:windowSoftInputMode="stateVisible|adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
According to Google's recommendation Here, you should not prevent this white screen from launching. You can use this theme attribute to turn off the initial blank screen that the system process draws when launching the app.
<item name="android:windowDisablePreview">true</item>
However, This approach is not recommended because it can result in a longer startup time than apps that don’t suppress the preview window. Also, it forces the user to wait with no feedback while the activity launches, making them wonder if the app is functioning properly.
They recommend to use the activity's windowBackground theme attribute to provide a simple custom drawable for the starting activity instead of disabling the preview window.
Therefore, here is the recommended solution:
First, create a new drawable file for example startup_screen.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
<!-- The background color, preferably the same as normal theme -->
<item android:drawable="#android:color/white"/>
<!-- Product logo - 144dp color version of App icon -->
<item>
<bitmap
android:src="#drawable/logo"
android:gravity="center"/>
</item>
</layer-list>
Second, reference it from your style file. If you use Night mode. Add it in both themes.xml files.
<!-- Start Up Screen -->
<style name="AppThemeLauncher" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="android:statusBarColor" tools:targetApi="l">#color/lightGray</item>
<item name="android:windowBackground">#drawable/startup_screen</item>
</style>
If you notice, I added statusBarColor attribute to change the color of status Bar according to my custom design.
Then, Add AppThemeLauncher Theme in your current activity.
<activity
android:name=".MainActivity"
android:theme="#style/AppThemeLauncher"/>
If you want to transition back to your normal theme, call setTheme(R.style.AppTheme) before calling super.onCreate() and setContentView():
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// Make sure this is before calling super.onCreate
setTheme(R.style.AppTheme)
super.onCreate(savedInstanceState)
// ...
}
}
Did you try to put initialization to onActivityCreated?
Inside Application class :
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
#Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
if(activity.getClass().equals(FirstActivity.class) {
// try without runOnUiThread if it will not help
activity.runOnUiThread(new Runnable() {
#Override
public void run() {
new InitializatioTask().execute();
}
});
}
}
#Override
public void onActivityStarted(Activity activity) {
}
#Override
public void onActivityResumed(Activity activity) {
}
#Override
public void onActivityPaused(Activity activity) {
}
#Override
public void onActivityStopped(Activity activity) {
}
#Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
#Override
public void onActivityDestroyed(Activity activity) {
}
});
As you are already aware why this white screen is there, as due to background processes or application initialization or large files, so just check below idea for overcome from this.
To prevent this white screen on beginning of the app, one way is splash screen, this is just a way not final and you must have to use.
When you will show splash screen from your splash.xml file, then also this issue will be remain same,
So you have to create ont style in style.xml file for splash screen and there you have to set window background as your splash image and then apply that theme to your splash activity from manifest file. So now when you will run app, first it will set theme and by this way user will be able to see directly splash image instead of white screen.
Both properties works
<style name="AppBaseThemeDark" parent="#style/Theme.AppCompat">
<!--your other properties -->
<!--<item name="android:windowDisablePreview">true</item>-->
<item name="android:windowBackground">#null</item>
<!--your other properties -->
</style>
Just write the item in values/styles.xml:
<item name="android:windowBackground">#android:color/black</item>
For example, in the AppTheme:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">#null</item>
<item name="android:windowBackground">#android:color/black</item>
<item name="colorPrimary">#color/colorPrimary</item>
<item name="colorPrimaryDark">#color/colorPrimaryDark</item>
<item name="colorAccent">#color/colorAccent</item>
</style>
Style :-
<style name="SplashViewTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">#drawable/splash</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
In Manifest :-
<activity android:name=".SplashActivity"
android:theme="#style/SplashViewTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
You should have colors.xml on values-night (create alongside values folder if it doesn't already exist) folder for dark theme colors.
eg.
<resources>
<color name="status_bar">#0e0e0e</color>
</resources>
(colors.xml on regular values folder will be used for light theme)
And on styles.xml which supplies your app theme you will have entry for background and statusbar which takes necessary values.
eg.
<style name="Theme.<AppName>" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">#color/red700</item>
<item name="colorPrimaryDark">#color/red900</item>
<item name="colorAccent">#color/red700</item>
<item name="android:statusBarColor">#color/status_bar</item>
<item name="android:background">#color/status_bar</item>
</style>
This style is referenced on AndroidManifest.xml file
android:theme="#style/Theme.<AppName>">
Delete
<style name="AppTheme.Launcher">
<item name="android:windowBackground">#drawable/splashscreen</item>
</style>
from style.xml file

android - can't customize ActionBar

Somehow I'm having a difficult time figuring out a seemingly easy problem. None of the attributes I specify, including android:text, android:textSize, android:textColor, android:textAppearance, seem to do anything to my ActionBar. When I run my project "MainActivity" on the ActionBar is still white and the default font size. I'm using API level 16.
Here's my styles.xml:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="android:style/Theme.Holo">
<item name="android:actionBarStyle">#style/ActionBar</item>
</style>
<style name="ActionBar" parent="android:style/Widget.Holo.ActionBar">
<item name="android:text">This String Is Not Showing Up In ActionBar!</item>
<item name="android:textColor">#android:color/holo_orange_dark</item>
<item name="android:textSize">44dp</item>
</style>
</resources>
and my AndroidManifest.xml:
<application
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="#string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Can someone please tell me what I'm doing wrong?
A few things:
<item name="android:text">This String Is Not Showing Up In ActionBar!</item>
This won't work. The actionbar title should be set using the activities label field in your manifest or by accessing the actionbar object in your activity.
UPDATE: the struck out information was partially inaccurate. Turns out you can set the title of the actionbar in styles.xml with the android:title tag. Here is a more accurate solution:
<style name="ActionBar" parent="android:style/Widget.Holo.ActionBar">
<item name="android:title">This String WILL show up in the ActionBar!</item>
<item name="android:textColor">#android:color/holo_orange_dark</item>
<item name="android:textSize">44dp</item>
</style>
OLD ANSWER:
To change the text style of the actionbar title (titleTextStyle) you will need a new style:
<style name="Text.ActionBar">
<item name="android:textColor">#android:color/holo_orange_dark</item>
<item name="android:textSize">44dp</item>
</style>
and reference it from your actionbar style
<style name="ActionBar" parent="android:style/Widget.Holo.ActionBar">
<item name="android:titleTextStyle">#style/Text.ActionBar</item>
</style>
For more information on the styles you can theme in the actionbar check out the R.attr documentation.
I was able to do similar things with the below code. PS - I used Appcompat but since you are using ApI 16 you can use the current ActionBar itself.
<!-- general styles for the action bar -->
<style name="MyActionBar" parent="#style/Widget.AppCompat.ActionBar">
<item name="android:titleTextStyle">#style/TitleTextStyle</item>
<item name="android:background">#drawable/actionbar_background</item>
</style>
<!-- action bar title text -->
<style name="TitleTextStyle" parent="#style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">#color/actionbar_text</item>
<item name="android:textSize">100sp</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppCompatTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:actionBarStyle">#style/MyActionBar</item>
</style>

Categories