I'm using avalonia (version 0.10.3 - but the same happened with 0.10.0 - on Net5.0 project) as the UI for a project and when I create for instance a splash or an about screen, the title bar must be invisible.
On windows this works just fine with these parameters in the window section :
CanResize="False"
ExtendClientAreaToDecorationsHint="True"
ExtendClientAreaChromeHints="NoChrome"
ExtendClientAreaTitleBarHeightHint="0"
Unfortunately, on Linux (mint - latest version with latest updates), the title bar remains visible (also if I set ExtendClientAreaTitleBarHeightHint="-1").
Is this a known issue or am I doing something wrong ?
I do not have a mac, but is that also the case for mac ?
X11 uses so-called "server decorations". Window frame is drawn by a window manager in a separate process, so it's not really possible to extend into that area.
You can still disable the frame completely and draw your own, but in general it's not really recommended since you will break advanced window interactions in basically every non-GNOME based Linux distro (GNOME doesn't care because it doesn't have any advanced window interactions).
In some future version Avalonia would use a custom-drawn frame for GNOME with a configuration option to ignore your user's preferences in favor of a fancy looking window border for other desktop environments as well, but it's not implemented yet.
I had a similar problem but I "solve it" by defining the window property as:
WindowState = WindowState.FullScreen;
Comparing with Normal or Maximized, with title bar in fullscreen remains hidden.
Related
Since Android 11 the correct way of displaying a fully immersive fragment is by hiding and showing StatusBar and NavigationBars via the following code which fully supports all devices with a camera notch, at any API level. Note the WindowCompat version replaces the framework version, so you don’t need to check for a particular API level as you did when using the framework version.
Hide
WindowCompat.SetDecorFitsSystemWindows(Activity.Window, false);
WindowInsetsControllerCompat windowInsetsControllerCompat = WindowCompat.GetInsetsController(Activity.Window, Activity.Window.DecorView);
windowInsetsControllerCompat.SystemBarsBehavior = WindowInsetsControllerCompat.BehaviorShowTransientBarsBySwipe;
windowInsetsControllerCompat.Hide(WindowInsetsCompat.Type.StatusBars() | WindowInsetsCompat.Type.NavigationBars());
Show
WindowCompat.SetDecorFitsSystemWindows(Activity.Window, true);
WindowInsetsControllerCompat windowInsetsControllerCompat = WindowCompat.GetInsetsController(Activity.Window, Activity.Window.DecorView);
windowInsetsControllerCompat.Show(WindowInsetsCompat.Type.StatusBars() | WindowInsetsCompat.Type.NavigationBars());
This eliminated the overly complex, very poorly documented and potentially error-prone code like below, which was used prior to Android 11.
Window.DecorView.SystemUiVisibility = (StatusBarVisibility) (SystemUiFlags.Fullscreen |
SystemUiFlags.HideNavigation |
SystemUiFlags.Immersive |
SystemUiFlags.ImmersiveSticky |
SystemUiFlags.LayoutHideNavigation |
SystemUiFlags.LayoutStable |
SystemUiFlags.LowProfile);
I was attempting to provide a choice of either displaying all fragments fully immersive or allowing some fragments to display as “letterboxed” i.e. not allowing the window to render into the DisplayCutout area. So my existing preference choice Devices with Notches/Cutouts allow full screen display would have to change to support multiple choice.
The problem I hit was that code I had used (like the WindowCompat code above since Android 11) was failing to display the fragment fullscreen when first launched. When it opened for the first time the window would attempt to go full screen, but only the NavigationBar would be removed. The StatusBar area was left as a black rectangle. You could see the animation of the time on the left and the icons on the right side of the StatusBar disappearing, (statusBar contents removed) but the window didn’t render into the StatusBar area. Immediately when rotated, the fragment became full screen and when rotated back to Portrait it corrected itself and was full screen again.
So in frustration, I went hunting on StackOverFlow looking for a solution but everything I found suggested that my ImmersiveFragment class was coded correctly. Then because this was my first attempt at using Material 3, I then started to suspect Material3, so I went backwards to my NavigationGraph6 project (Material2) and after much testing, I was able to reproduce the same problem, which eliminated Material3.
More searching on StackOverflow and I came across a Kotlin post that was the same as all the others, except that it had the following line – equivalent to this C# line.
Activity.Window.AddFlags(WindowManagerFlags.LayoutNoLimits)
So I added that line before the WindowCompat.SetDecorFitsSystemWindows(Activity.Window, false) in the HideSystemUi() and then cleared the flags before the WindowCompat.SetDecorFitsSystemWindows(Activity.Window, true) line in the ShowSystemUi with
Activity.Window.ClearFlags(WindowManagerFlags.LayoutNoLimits)
and immediately it worked.
So my question is why is this required and has anyone come across the same problem with immersive fragments?
Definition of LayoutNoLimits – Allow window to extend outside of the screen ???.
Does anyone have a clue what this definition actually means?
To test the code (comment out the new lines in ImmersiveFragment.cs). You can find the project NavigationGraph7 at https://github.com/gmck/NavigationGraph7. The immersiveFragment is the RaceResultsFragment (inherits from ImmersiveFragment) accessed by the BottomNavigationBar on the SlideShowFragment.
I referred to the official doc both Android and Microsoft too. As you said that: "Allow window to extend outside of the screen". There are few official definitions of it...
You can check Can I set FLAG_LAYOUT_NO_LIMITS only for status bar?, it talks about usage of LayoutNoLimit. Wish it could be helpful to you.
Is it possible to change the taskbar color when fullscreen is set to 0 in buildozer.spec file?
I already tried changing Window.clearcolor value but hence taskbar is not part of Window when fullscreen is 0, taskbar color doesn't change.
How does one do that?
I believe this is the answer for Java, therefore (as inclement said) you need to use pyjnius to access the Java functions from Python and then wrap the code mentioned in the linked answer to something usable from Kivy.
Example (not tested):
from jnius import autoclass
WindowManager = autoclass('android.view.WindowManager')
R = autoclass('android.R')
activity = autoclass('<your.app.name>.PythonActivity').mActivity
window = activity.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.setStatusBarColor(activity.getResources().getColor(R.color.my_statusbar_color));
I think only these colors are available, but feel free to try other values. I've seen some issues with android.R importing in Java, so you might want to just use the raw values instead of fetching them from android.R module.
I can do almost everything else with nwjs so I find my failure to make this work very frustrating.
I have made the simplest of html file with <body style="background-color:rgba(0,0,0,0);"></body> and "transparent":true, in the window section of package.json, but the window background remains white.
(I have a new Dell tablet PC running windows 8.1.)
Something I've missed?
#chris .... quick check -- do you have your Windows "Theme" set to an "Aero" type, which allows for transparency? I'm not sure on Windows 8.1, but on 7 the "standard" desktop themes don't allow for transparency (shadowed, rounded elements) whereas the Aero desktop theme(s) do.
I've never had any problem with Interface Builder elements before (labels, sliders, switches etc), but suddenly I can't get new ones to show up in the app!
I can drag them in to the view, arrange them as I want, set values etc, but when I run the code they are gone.
A mysterious thing is that I can set values to them in the code without problem, like:
self.myNewLabel.text = #"test"
And if I stop the code with a breakpoint and ask the console
po self.myNewLabel.text it gives me "test"
But still, nothing shows up on the screen!
I've searched for any hidden or alpha properties that was set by misstake, but found nothing.
What are the pitfalls here? What am I missing?
System Info:
Xcode 6.1
OSX 10.10
Running on iOS 8.0 device
Check the constraints created by Interface Builder - they may be inadvertently pushing your UI elements off-screen.
It seems odd, so i am likely just missing it in preferences, but how does one change the actual background color of IB in Xcode? Not any of the elements, but the actual blinding white of the standard IB? Too much contrast and when you zoom out, the view controllers almost disappear..
Thanks for any tips..
I've gone ahead and created an Xcode plugin that changes the background color of the storyboard editor. You can find the source at rpendleton/xcode-canvas-color. I've hardcoded it to a light gray color, as shown in the screenshot below, but this can be changed easily.
(Also, I don't think you're missing a setting for it. When I decompiled Xcode, the drawRect method for the background view explicitly called [[NSColor whiteColor] set].)
One doesn’t. Submitting a feature request to Apple is your only hope.
Unfortunately, with recent changes to Xcode, Ryan Pendleton's plugin is no longer a viable option. (unless you are willing to break Xcode's code signing, which can be quite problematic.) However, the good news is that there is now an official solution -- so long as you are willing to upgrade to OS X 10.14 Mojave: Upgrade to OS X 10.14 Mojave and turn on Dark mode. When Dark Mode is enabled, the background in Interface Builder darkens to a nice, eye-pleasing dark gray color. Navigating around a large storyboard is now MUCH easier (and less eye-scorching :) )
Before:
After: