[Q] using getSurfaceFrame to get display width/height? - Android Software Development

So I'm trying out making a live wallpaper and I'm using the sample code provided in the SDK for the cube live wallpaper
I wanted to use this code to get the height/width of the display
Code:
@Override
public void onCreate(SurfaceHolder surfaceHolder) {
super.onCreate(surfaceHolder);
Rect frame = getSurfaceHolder().getSurfaceFrame();
float width = frame.width();
float height = frame.height();
// By default, we don't get touch events, so enable them.
setTouchEventsEnabled(true);
}
and if you're wondering about the context of the code, just look at this sample
Unfortunately, when I run this code, the width and height return as 0, though if I put this in onVisibilityChanged, the correct values are returned, why is this and where should I put it?
Also, when I do get the display width/height, it includes the real estate behind the notification bar as well. Is there a way I can get the width/height area of everything excluding the notification bar?

Related

[Q] creating a bitmap

how do I create a bitmap from a png image?
This turns a png into a bitmap:
Bitmap bmp = BitmapFactory.decodeResource(activity.getResources(), R.drawable.myPNGimage);
I think your other post asked about drawing images onto the screen. To do this, you need an object that you want to "draw onto".
So in this example, lets say you want to draw "bmp" onto "backgroundBmp". (Pretend "backgroundBmp" is a 400x400 pixel image)
Canvas canvas = new Canvas(backgroundBmp); // This creates a canvas to work with, thats the size of backgroundBmp (400x400)
Now I can draw a bitmap onto it, by doing:
canvas.drawBitmap(bmp, x, y, null); // This draws bmp at (x,y) coordinates on the canvas.
Take a look at the Lunar Lander and Jet Boy sample applications at developer.android.com.

windowIsFloating=true & window size

I'm developing an activity with a floating main window (e.g. windowIsFloating=true in the activity style). Unfortunately, within a floating window my layout (using fill_parent) is not expanded to the full screen size; fill_parent behaves like wrap_content instead. I suppose floating windows are not automatically sized to the regular/maximized window size.
To circumvent this problem, I use the following code to add the layout to my window:
View view = getLayoutInflater().inflate(R.layout.main, null);
setContentView(view, new LayoutParams(width, height));
This renders my layout correctly. However, how do I find out the correct width and height, taking into account decorations like the status bar? According to the documentation, floating windows automatically get the FLAG_LAYOUT_INSET_DECOR set, causing the WindowManager to report inset rectangle needed to ensure the content is not covered by screen decorations. However, I can't find any documentation on how I can retrieve this inset rectangle; does anyone know this?
I've tried many options (all called from my Activity onCreate method), but they all either return non-usefull information or the full screen size, not taking into account the status bar height:
WindowManager.LayoutParams lp = (WindowManager.LayoutParams)getWindow().getAttributes();
Rect rect = getWindow().getDecorView().getBackground().getBounds();
getWindow().getDecorView().getGlobalVisibleRect(rect);
getWindow().getDecorView().getHitRect(rect);
getWindow().getDecorView().getLocalVisibleRect(rect);
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
I'm now using a work-around that simply substracts 38 from the height to account for the status bar, but of course that's not a real solution.
Also, does anyone know whether it is possible to hide or overlay the status bar when using a floating window? Setting windowFullScreen=false only works correctly for non-floating windows.
I believe you can set the theme in xml to remove the status bar in your app.
<activity android:name=".YourClassName" android:theme="@android:style/Theme.NoTitleBar"/>
And
<activity android:name=".YourClassName" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
From something awesome
O yea that is in the AndroidManifest.xml
From something awesome

Android theming language

Hey guys good days
I just want to ask maybe this is off topic but i just can apply the code provided by devs without understanding what the mean of it.
So i want to know where do you guys learn it ?
Example what is image view, frame layout, linear layout and so on.
If you learn it from book, can i know the title of it ?
TIA
Try
http://developer.android.com/reference/packages.html
http://developer.android.com/reference/android/widget/LinearLayout.html
and specially
http://forum.xda-developers.com/coding/education
ImageView = its imageview the one that containing image like a pictureFrame.
LinearLayout = its a linearLayout. For example you want to put imageView inside a LinearLayout
its like putting a pictureFrame in a wall.
LinearLayout Orientation = vertical - make the child vertically arrange.
for example you have three picture frames in a wall and you add androidrientation="vertical" the picture frame will be aligned verticaly same with androidrientation="horizontal" this will arrange the child horizontally.
FrameLayout = like LinearLayout but this layout makes you put Layout in top of other Layout.
:good::good::good::fingers-crossed::fingers-crossed::fingers-crossed::good::good::good:​

[Q] Overlay list item when it's pressed

I want to add a layer when list item's pressed. The layer will overlap any object in list item (imageview, textbox, layout background, ...). It's exactly like Google apps (Play, Youtube,...), when you press or hold an item, you can see it. My app has some complex list items, so using background seletor is not good enough.
Thank you.
Looking at the play en youtube app, it seems like they only change the backgroundcolor and don't add an overlay.
If you have created your own row layouts and added them to the list, you can get the most outer viewgroup from this layout in your onItemClicked method.
Just change the background of this viewgroup.
Code:
onItemClicked(View v) {
[INDENT]v.setBackground(your background);[/INDENT]
}
If you do want an overlay instead of another background, you can wrap your row layout in a frame layout with an invisible overlay. Then just change the visibility in the onItemClicked method.
Code:
onItemClicked(View v) {
[INDENT]View overlay = (View) v.findViewById(R.id.overlay);
overlay.setVisibility(View.VISIBLE);[/INDENT]
}

[Tasker] Clear navigation bar color in non-samsung apps

Ever since I got my note I've been annoyed that some non-samsung apps had a white nav bar in dark mode (e.g. google messages). I use gesture navigation, and my expectation is that the nav bar should be clear revealing the content below it. Hiding the gesture hint is an option but I like having it there sine it makes switching apps easier and shifts tab bars up a little but, preventing accidental touches.
I've seen posts about changing the color using ADB but that's too cumbersome to have to do every reboot or after applying a theme. I found a reddit post detailing a tasker task which is supposed to let you set the nav bar color to any arbitrary color, but you need to use a separate tool in order to compute the value of the color (since android settings uses a decimal representation of the color rather than the usual hex code) and the provided one no longer seems to be working. Setting a custom color is not really what I wanted it to do anyway (I wanted it to be clear, as it is in most apps). This task also seems to not set navigationbar_current_colorwhich is needed on our devices.
So I went ahead and made a modified version of this task which does work on my note 20 ultra, and just sets the nav bar color to clear:
https://taskernet.com/shares/?user=...cqdIuFWjZaj&id=Task:Set+Navbar+Color+to+Clear
Of course you should use this at your own risk. Samsung hardcodes the nav bar color to white to avoid burn in, so if you change the color to something else and view a lot of white content above the nav bar, you may experience burn in. If clear is not your preferred color, I pre-computed some different values that you can replace the color_codevalue with:
Gray: -14671579
White: -1
Black: -16777216
Clear: 0
If you do want to use a custom color here's a little JS snipped that will compute it:
Code:
function computeColor() {
// Color code #202125 with an alpha of 1
var r = 0x20;
var g = 0x21;
var b = 0x25;
var a = 0xFF;
var value = (a << 24) | (r << 16) | (g << 8) | b;
console.log(value.toString()); // this will output -14671579
}

Categories

Resources