i have very basic knowledge about the framelayout . i wants to implement two listviews in a One frame Layout plus and the condition is whenever i click any of list out of two list in a frame layout "the clicked list must get zoomed out to fill the screen".
This is not the correct way to do this, if you've read the FrameLayout doc you'd see this:
FrameLayout is designed to block out an area on the screen to display a single item. Generally, FrameLayout should be used to hold a single child view, because it can be difficult to organize child views in a way that's scalable to different screen sizes without the children overlapping each other. You can, however, add multiple children to a FrameLayout and control their position within the FrameLayout by assigning gravity to each child, using the android:layout_gravity attribute.
What you want to use is fragments.
I hope this helps.
Related
I have seen that most of the people use FrameLayout for loading Fragments.My question is Why FrameLayout ? and why not the others like LinearLayout,RelativeLayout or ConstraintLayout.Most of the answers on StackOverflow says FrameLayout is designed to block out an area on the screen to display a single item. But the others can also block the whole screen if the its height and width set to match_parent.What is the difference ?Why most of the people choose FrameLayout if others can do the same job ?
Thanks in advanceCheers
You can use anything (LinearLayout, RelativeLayout or ConstraintLayout).
FrameLayout is just the most basic ViewGroup that provides the least functionality. It is ideal to use if you only need to hold a single child - in this case, a fragment.
FrameLayout To load child one above another, like cards inside a frame, we can place one above another or anywhere inside the frame.
Designed to display a stack of child View controls. Multiple view controls can be added to this layout. This can be used to show multiple controls within the same screen space.
LinearLayout Designed to display child View controls in a single row or column. This is a very handy layout method for creating forms.
RelativeLayout Designed to display child View controls in relation to each other. For instance, you can set a control to be positioned “above” or “below” or “to the left of” or “to the right of” another control, referred to by its unique identifier. You can also align child View controls relative to the parent edges.
For more information, please check this
https://developer.android.com/guide/topics/ui/declaring-layout#CommonLayouts
I hope it's helpful to you!
I'm not so much good at programming but I can give you some reasons.
First, have a look at official docs.
In order to replace one fragment with another, the activity's layout includes an empty FrameLayout that acts as the fragment container. https://developer.android.com/training/basics/fragments/fragment-ui#AddAtRuntime
This means for switching between multiple fragments we have to use FrameLayout. Why Framelayout then? Another look at the official docs.
FrameLayout is designed to block out an area on the screen to display a single item. Generally, FrameLayout should be used to hold a single child view, because it can be difficult to organize child views in a way that's scalable to different screen sizes without the children overlapping each other. You can, however, add multiple children to a FrameLayout and control their position within the FrameLayout by assigning gravity to each child, using the android:layout_gravity attribute.
https://developer.android.com/reference/android/widget/FrameLayout.html
It can block out an area of the screen to display a single item. Other layouts could do the same thing too. So Frame?
Because FrameLayout has one characteristic that other layouts don't have.
FrameLayout can hold its child one above another, like a deck of cards. In a deck of cards, one card is placed above other.
FrameLayout does the same job. When you use FrameLayout as a fragment container it holds the child fragment one above other as your code wants. Then it shows one and left others behind it, you switch back to other fragments then it comes above and others go behind again.
That's all I know.
All examples I find for FrameLayout use the FrameLayout to stack multiple children on top of each other. Even e.g. Stackoverflow answer here says
You use a FrameLayout to stack child views on top of each other,
The official documentation however states
FrameLayout is designed to block out an area on the screen to display a single item. Generally, FrameLayout should be used to hold a single child view,
While adding multiple children to it is possible, it sounds like it's just a side effect.
So, what's the originally intended use case for a FrameLayout with a single item? Anyone has an example for that?
There are different purposes why FrameLayout with only one child can be useful. Imagine having a loading spinner that should be centered but not fill the whole page but also you want the content to be hidden when the loading spinner is shown. Possible solution: FrameLayout with match_parent for width and height and a background color and the ProgressBar (Loading spinner) with android:layout_gravity=center as only child of the FrameLayout. So now you can set the android:visibility of the FrameLayout to show or hide the whole thing.
Just a beginner question about what is the equivalent to FrameLayout (Android) in Xamarin.Forms?
FrameLayout is a control that is designed to contain a single child but can optionally have multiple children that are controlled with gravity or what works similar to zindex.
I don't think there is a direct map from xamarin.Forms to Framelayout.
if your just looking for a page level container for a single control there is:
Frame-An element containing a single child, with some framing options. Frame have a default Xamarin.Forms.Layout.Padding of 20.
ScrollView-An element capable of scrolling if it's Content requires.
If your looking for a Multiple Item Container the options are:
Grid -A layout containing views arranged in rows and columns.
RelativeLayout -A Layout that uses Constraints to layout its children.
StackLayout - A Layout that positions child elements in a single line which can be oriented vertically or horizontally. This layout will set the child bounds automatically during a layout cycle. User assigned bounds will be overwritten and thus should not be set on a child element by the user.
see:https://developer.xamarin.com/guides/cross-platform/xamarin-forms/controls/layouts/
However none of these support the Z-Index like ability of FrameLayout the best option at the moment is a Grid with a single element. The children will layout from back to front in the order they are in the Grids.Children stack.
there are many question about "FrameLayout". But i need the exact use of this different from LinearLayout, RelativeLayout. And in a project when we have to use this?
FrameLayout is designed to block out an area on the screen to display a single item. Generally, FrameLayout should be used to hold a single child view, because it can be difficult to organize child views in a way that's scalable to different screen sizes without the children overlapping each other. You can, however, add multiple children to a FrameLayout and control their position within the FrameLayout by assigning gravity to each child, using the android:layout_gravity attribute.
LinearLayout arranges elements side by side either horizontally or vertically(rows vs columns).
RelativeLayout is a layout manager that helps you arrange your UI elements based on some rule. You can specify thisngs like: align this to parents left edge, place this to the left/right of this elements etc.
Check these links
http://logc.at/2011/10/18/when-to-use-linearlayout-vs-relativelayout/
http://developer.android.com/reference/android/widget/FrameLayout.html
I began to study Android not so long ago and have a question relating to which approach I should use to solve the simple task. Let's suppose I have a view (maybe, a button) and I want user to be able to move it across the screen with a finger. Until AbsoluteLayout was deprecated, the right approach seamed obvious. I would've just changed position of my view based on corresponding events. But what is right now?
Create a custom view of your own and add a onTouch event listener. It is very simple. Explained very well here.
If you're trying to move your views in order to navigate through your application or page through images in a gallery, Android provides a collection of widgets to do things like that. If you're trying to, say, pan across a large image, maybe this will help: Image in Canvas with touch events
Im using FrameLayout and update marginLeft and marginTop
You can add multiple children to frame layout, though this is not recommended because of multiple resolutions issues.
from the android docs:
FrameLayout is designed to block out an area on the screen to display
a single item. Generally, FrameLayout should be used to hold a single
child view, because it can be difficult to organize child views in a
way that's scalable to different screen sizes without the children
overlapping each other. You can, however, add multiple children to a
FrameLayout and control their position within the FrameLayout by
assigning gravity to each child, using the android:layout_gravity
attribute.
This "warning" is not applicable in your case because you are explicitly setting the margins according to the user touch event.