How to inspect the UI for xamarin forms - xamarin

During the xamarin forms development, how to verify if a control is occupying certain pixels in the screen.
(i.e) Like we verify for a web page by going through the developer tools of a browser of the styles each of the element occupies.
Is this possible with Xamarin emulator? To verify if the UI is coming up as expected on the emulator?

There is the Xamarin Inspector if you can afford a Visual Studio Enterprise subscription.
If you can't afford this (about 6000 $ p.a. is quite something), you could use the Appium Inspector (see here). It's very generic and hence not optimized for Xamarin Forms, but it might do the trick, if you're on a budget.
It allows you to inspect the UI elements and verify that they take the space they should. This is approximately how it looks (I think it's an older version):
Anyway, it's somewhat tricky to set up, but if you have set it up, you can use it to run UI-tests, too (that's what it's usually used for).
Bonus: The lowest key variant to verify that your controls take the space they should is simply setting their background color and visually inspect your layout.

Related

StartScreenCapturebyWindowId() not excluding overlapping windows for certain programs (Agora Unity)

I am trying to setup individual window sharing for a project in Unity for Windows. The way I'm currently going about doing this is by using EnumWindows(), IsVisableWindow(), and GetWindowText() to create a dictionary of window titles and handles, then calling StartScreeCapturebyWindowId() to share the selected window.
This works relatively well for most process; the window of the process and only the window of the process is streamed. However, for certain programs (like Google Chrome, Discord, and Windows Photos) the captured area is set correctly, but overlapping windows are not culled out.
Does anyone know what could be causing this problem? Is there something wrong with the way I'm grabbing the handles for these windows? Or is there something about starting a screen capture that I am missing?
You certainly did the correct things. However, you also hit the limitation to the Windows part of the SDK. To understand this better, the set of programs are UWP applications. They have different ways to share the visible pixels. Previously version of Agora SDK could not even show the window. Starting from 3.0.1, the SDK uses Rectangle cutting method to get the window display. You may further read the online documentation about that API here.
There isn't much Agora can do for the near term. So you will just need to deal with the user experience (e.g. by warning them) or look at solutions like using Web SDK instead.

Dynamically changing the look of a WinRT javascript app

You know when you create a web app, you can hit F12 from your browser and be able to edit things such as style sheet, remove dom elements etc. on the fly.
This makes for a quick turn around when developing a UI. A real time saver!
Otherwise there's a lot of compile, deploy and clicking click to get to the area you wanted to test. And if the area you're testing is at the end of the workflow, the pain is that much more. I find doing this to be frustratingly time consuming when all you want to do is just change the font size to make it look "better".
Is there any tool similar to that in WinRT environment? Is this just the nature of Mobile App development or is there something out there (regardless of platform) that allows you to edit the UI on the fly?
Yes, you have several options available to you.
First, Blend for Visual Studio--which is installed with Visual Studio Express for Windows--is a great styling tool. It shares the same project structure with VS, so you can have both running at the same time. In VS, in fact, right-click a project in Solution Explorer, select Open in Blend, and there you are.
Blend actually loads the app and executes the JS code, so all dynamically-created elements are also in place. It has an Interactive Mode as well that lets you go into the running app, navigate and set state as you want, then exit that mode and work on styling. For more, I have a video in my book (first edition | second edition preview) that shows the basics of Blend--you can specifically go here and check out Videos 2-2 and 5-3 from the second edition). Chapter 2 gives a little intro in the text as well.
The other two options are in Visual Studio itself.
First, when an app it running there's a command Debug > Refresh Windows Apps (F4) that will reload the HTML and CSS without restarting the app. I use this to reload changes for exactly the reasons you mention. This same command is on the toolbar just to the right of the pause/stop/restart buttons.
Second, a running app will have a DOM Explorer pane in the debugger. If you don't see it, use the Debug > Windows > DOM Explorer command to open it. In that pane you can navigate the DOM tree (like you can in Blend's Live DOM pane) and locate the elements you care about, or you can use the leftmost button in the DOM Explorer to go select and element directly in the app.
On the right side of the DOM explorer you then have tabs for Styles, Trace, Computed, Layout, and Events. You can make changes directly in the Styles pane and they're applied immediately. I use this all the time, in fact, to try out things.
I have a 2 minute video in my book for this as well, see here. Some docs are on http://msdn.microsoft.com/en-us/windows/apps/hh696632.

How do I get exactly the same look & feel of native WP7 apps?

One thing I think is important is to give users a consistent look and feel for every page and every app on the Windows phone. I figured out how to do pretty page turns the same way native apps do them, and now I'm trying to figure out how to make all my ListBox items look the same way they do in native apps as well.
For example, when you are in the settings app and you click on an item, the item's text shrinks a little bit while your finger is on it, and when you release the button, the text goes back to normal size and initiates a page navigation.
I can do page navigation. But I want my navigation buttons be exactly the same, not just kinda similar. As a matter of fact, I want my whole app to conform so uniformly to the rest of the OS that the users will think Microsoft built it. Is there a standard library, set of controls, or framework that Microsoft uses that we can have access to? Is there a blog or some other resource devoted to showing us how to mimic Microsoft UI design?
Whilst Silverlight for WP7 makes it easy to create applications that have the same static look as the native apps (email etc...), the Silverlight framework lacks much of the dynamic features, the transitions, animations and other effects. A while back I wrote a Metro In Motion blog series that shows how to mimic the fluid animations that are exhibited by the native applications ...
Metro In Motion Part #1 – Fluid List Animation
Metro In Motion Part #2 – ‘Peel’ Animations
Metro In Motion Part #3 – Flying Titles!
Metro In Motion Part #4 – Tilt Effect
Metro In Motion Part #5 – SandwichFlow
Metro In Motion Part #6 – Rolling List Location Indicator
Metro In Motion Part #7 – Panorama Prettiness and Opacity
Metro In Motion Part #8 – AutoCompleteBox Reveal Animation
Hopefully these will help you achieve the native look and feel you are after.
For example, when you are in the settings app and you click on an item, the item's text shrinks a little bit while your finger is on it, and when you release the button, the text goes back to normal size and initiates a page navigation.
It's TiltEffect that you can use from Silverlight Toolkit
Silverlight for WP7 Toolkit TiltEffect in depth
Some system animation effects you can implement with help of Metro In Motion series
Here is a blog post from the Windows Phone team releasing an icon pack with many commonly used icons in WP7. It should be useful in the quest for UI uniformity.
EDIT:
Here is a list + samples of system text styles you can use.

WP7 alternative to tabs

I have a mobile app. On the two major smartphone platforms, I employ tabbed UI - there are 3-4 screens with pretty much independent functionality, they exchange info very occasionally, most of the time screen switching is performed by the user, in arbitrary order.
Windows Phone 7 does not have a tab control, and page navigation assumes a stack model (you go back to where you came from). What would be a sensible WP7 alternative to that kind of UI?
The general Phone-7 replacement for the tab paradigm would be either a Pivot or a Panorama. Which you choose depends a lot on exactly on what you're showing, but generally speaking the Pivot is probably what you're after.
I would recomend a pivot control
WP7 UI is built around the metro style and it was a deliberate choice to not have a tab control. (have a look at the official guidelines here) I would recommend you use a metro control like panorama or pivot.

How to make a GUI that works on all window mobile phones?

Up to now I been using the pda emulator in visual studios 2008 (I am using windows mobile 6.1 professional sdk).
So I just dragged and dropped most of my GUI components into the form. In one instance I made a panel then in this panel I dynamically generated labels in it with certain location positions.
I then put it on my Hp PAQ 110 Classic pda and it looked fine and everything. Then I was looking through the emulators one of them was called professional square. So I decided to run it and when it ran my program it looked like crap.
I had missing labels, missing controls and it just looked horrible.
I thought maybe it would like do some resizing for me but it seems to either did a shitty job or it does not do it at all.
So how do you make a GUI that will work well on all mobile phones(or at least the vast majority of them).
Is there like X number of types of mobile phones? Like the emulator emulates a pda and it works on my HP one so I am assuming that all window mobile device pdas have the same screen size.
Then the next question is how do you make the controls position properly from one device to another? I heard of people using XML files that have all the location position, sizes and etc that they call up and I guess essentially generate the GUI dynamically based on the information in XML.
But I could not find any examples how the XML file would look like, how to detect what phone type it is so that I could call up the right node of the file for that phone.
I am not sure if there are any other ways but this seems better then a set of GUI forms for each one.
Also would it be recommended to have most things in a panel so that way even if the stuff is bigger you can at least turn auto scrolling on.
thanks
I spent a good amount of time looking at different solutions for this problem (see my question here as well) and ended up with a pragmatic approach - consistent use of docking. You have to restrict yourself to the least common denominator, i.e. the lowest resolution you want to support, in terms of how much you can fit on the screen. The good news was that grids always use the entire available real estate, and my forms flow correctly on all devices and the screens don't look like they are broken.
This is far from being an easy task. You can follow some guidelines, but the only thing that will actually work is to always test the User Interface in all possible screen resolutions. Emulators are a good way to start, however it will be better to have an actual device. Some things like font sizes and text readability can only be tested in a real device. So, these are my advices:
Try to use docking for positioning your controls.
You need to be able to handle orientation changes correctly. Using docking helps, but again you always need to test in different screen resolutions.
At some point you will find out that it is inevitable to detect the screen size and adapt the User Interface dynamically. I don't agree that you should restrict yourself to only display what can fit in the smallest screen. A professional application should adapt itself to the available screen size and take full advantage of it.
Structure your application so that it is easy to support new screen resolutions. Make the main User Interface code screen size agnostic. Make it get all information about dynamic resizing - positioning from a configuration class. This way you only need to enhance a single item in your code in order to support a new screen resolution.
And of course:
Test in all possible screen resolutions. After even a minor change to the User Interface, retest.
Eventhough the above posts where helpful this video I found solves all my problems and you don't have to develop for the the lowest screen.
http://www.microsoft.com/events/series/detail/webcastdetails.aspx?seriesid=86&webcastid=5112

Resources