Make some controls visible when screen layout breakpoint is reached - UI5 - sapui5

I have 2 images and 5 buttons in between those 2 images in header of UI5 application. On using Overflowtoolbar, the overflow (...) is shown at the extreme right, how can I make it appear in between exactly considering I will adjust the overflow priority as "Never overflow" for both the images and they will never overflow.
Another way: Is it possible to introduce an action sheet/ breadcrumb menu in the header and make it visible only if certain screen breakpoint is reached and at that time make all the other buttons disappear. In a way - to make certain controls visible/hide based on breakpoint level.
Goal is to have both the images visible till the point its possible and rest everythig in ... preferably in between those images. Else I am not seeing those ..., only 2 images are shown in small screen.
XML.view
<OverflowToolbar design="Transparent">
<Image src="images/abc.png" height="3.5rem">
<layoutData>
<OverflowToolbarLayoutData priority="High"/>
</layoutData>
</Image>
<Button id="1">
<layoutData>
<OverflowToolbarLayoutData priority="Low"/>
</layoutData>
</Button>
<Button id="2">
<layoutData>
<OverflowToolbarLayoutData priority="Low"/>
</layoutData>
</Button>
<Button id="3">
<layoutData>
<OverflowToolbarLayoutData priority="Low"/>
</layoutData>
</Button>
<Button id="4">
<layoutData>
<OverflowToolbarLayoutData priority="Low"/>
</layoutData>
</Button>
<Button id="5">
<layoutData>
<OverflowToolbarLayoutData priority="Low"/>
</layoutData>
</Button>
<ToolbarSpacer></ToolbarSpacer>
<Image src="images/logo.png" height="2rem">
<OverflowToolbarLayoutData priority="NeverOverflow"/>
</layoutData>
</Image>
<ToolbarSeparator></ToolbarSeparator>
<core:Icon id="loginInfo" src="sap-icon://customer" size="2rem"/>
</OverflowToolbar>

Here is an example of two images with an action sheet / breadcrumb menu in between:
<OverflowToolbar asyncMode="true">
<Image src="..." />
<Breadcrumbs currentLocationText="Laptop">
<layoutData>
<ToolbarLayoutData shrinkable="true" /><!-- if UI5 version < 1.103. -->
<!-- Note: sap.m.Breadcrumbs is shrinkable by default since UI5 1.103. -->
</layoutData>
<links>
<!-- ... -->
</links>
</Breadcrumbs>
<Image src="..." />
</OverflowToolbar>
From https://jsbin.com/humuxew/edit?js,output
In order to make breadcrumbs shrinkable in the toolbar, <ToolbarLayoutData shrinkable="true"/> needs to be added to the layoutData aggregation.*
* Update: unless the SAPUI5/OpenUI5 version ≥ 1.103 (See commit: 512d3dd).

You won't be able to solve your task with an OverflowToolbar since the ... are always rendered as last element (see Renderer: Line 23).
You could use the Event API for screen width changes, modify a view model in the event handler and bind the visible property to that view model as described in Device Adaptation.

Related

How to increase the size of input and button

I have a simple form, that looks as follows:
On the large screen, it looks pretty small. I would like to increase the size and width.
This is the code:
<Page title="{i18n>authorization}">
<content>
<VBox alignItems="Center">
<f:SimpleForm id="registration" editable="true" layout="ResponsiveGridLayout" labelSpanXL="3" labelSpanL="3" labelSpanM="3" labelSpanS="12"
adjustLabelSpan="true" emptySpanXL="3" emptySpanL="3" emptySpanM="3" emptySpanS="0" columnsXL="1" columnsL="1" columnsM="1"
singleContainerFullSize="true">
<f:content>
<Label text=""/>
<Text text="{i18n>userAuthorize}"/>
<Label text=""/>
<Input placeholder="Enter your email address" id="email" type="Email" value="{confirm>/email}" liveChange="onHandleLiveChangeEmail"/>
<Label text=""/>
<Button type="Accept" enabled="{confirm>/enable}" text="{i18n>confirm}" press="handlePressAuthorization"
ariaDescribedBy="acceptButtonDescription genericButtonDescription">
<layoutData>
<FlexItemData growFactor="1"/>
</layoutData>
</Button>
</f:content>
</f:SimpleForm>
</VBox>
</content>
</Page>
Update
I have removed simple form and placed the controls in VBOX.
<Page title="{i18n>authorization}">
<content>
<VBox alignItems="Center">
<Label text=""/>
<Text text="{i18n>userAuthorize}"/>
<Label text=""/>
<Input placeholder="Enter your email address" id="email" type="Email" value="{confirm>/email}" liveChange="onHandleLiveChangeEmail"/>
<Label text=""/>
<Button type="Accept" enabled="{confirm>/enable}" text="{i18n>confirm}" press="handlePressAuthorization"
ariaDescribedBy="acceptButtonDescription genericButtonDescription">
<layoutData>
<FlexItemData growFactor="1"/>
</layoutData>
</Button>
</VBox>
</content>
</Page>
The controls still looks very small:
How can I increase the size of controls?
The properties labelSpan<ScreenSize> and emptySpan<ScreenSize> are the one which control the width of the actual elements within a "row" of the form.
More info here: https://sapui5.hana.ondemand.com/#/api/sap.ui.layout.form.SimpleForm
For example, for M you have label span of 3 and empty span of 3 => leaving 6 out of total 12 for the actual elements. Try reducing labelSpanM and emptySpanM to increase the width taken by the element Text, Button and Input
That being said, I don't think the choice of simple Form was a wise choice here - why don't you put the three elements directly into the VBox?
That also being said, in case you are implementing an authentication screen inside an application, you should rethink this and let authentication layers take care of that (wherever your app is running)
Update after Question update: depending on what you want to achieve, you could simply add a css class to the control and add some css. that is the "manual" way. you could add a custom theme and style the buttons there. you could add custom extensions of the standard controls, e.g. a custom button as extension of standard button. and completely change the rendering there. I think, this are more or less the possibilities

UI5 - VBox is not valid for aggregation footer of ObjectPageLayout

I have an application with a footer which is same for all pages. Until now, I used separate view for this which I attached to the bottoms of the pages. However, now I created two fragments for item details page (Display/Add modes), using the ObjectPageLayout and want to add my footer into both of those. As I understand, I should use fragment instead of View so I rewrote my footer view into fragment so it looks like this:
<core:FragmentDefinition xmlns="sap.m"
xmlns:f="sap.f"
xmlns:core="sap.ui.core"
>
<VBox>
<Text text=""/>
<Text text=""/>
<f:Card class="sapUiTinyMargin" height="100px" width="1144px">
<f:content>
<VBox width="100%" alignItems="Center">
<Text text=""/>
<HBox>
<Label text="{i18n>needHelp}" />
<ToolbarSpacer width="20px" />
<Link text="{i18n>contactUs}" href="mailto:xxx.xxx#xxx.com"/>
</HBox>
</VBox>
</f:content>
</f:Card>
</VBox>
</core:FragmentDefinition>
And then I put this fragment into the footer of the ObjectPageLayout, like this
<footer>
<core:Fragment fragmentName="xxx.portal.view.Footer" type="XML"/>
</footer>
However, when I try to load the page, I get the error "Assertion failed: "Element sap.m.VBox#__vbox1" is not valid for aggregation "footer" of Element sap.uxap.ObjectPageLayout#nav---connection--ObjectPageLayout"
Any idea why is it showing up and what I am doing wrong? I would also like to note that if I use some simpler elements in the footer (such as Toolbar), there is no error and it gets displayed correctly.
Thank you

How to indent the button? [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 5 years ago.
Improve this question
I have following SAPUI5 app:
[Codepen](https://codepen.io/bifunctor/project/editor/XaOapY#)
I would like to indent the query button on the same like from input.
How to accomplish that?
This is kind of a hack. Just add an empty label association to the
button.
<Label text="Payers"></Label>
<Input id="payerFrom" showSuggestion="true" placeholder="From"
required="true">
</Input>
<Input id="payerTo" showSuggestion="true" placeholder="To"
required="true">
</Input>
<Label text=""></Label>
<Button text="Query" type="Emphasized" press="queryData">
<layoutData>
<layout:GridData span="XL6 L6 M6 S12"/>
</layoutData>
</Button>
You can use the indent property of GridData.
Try this out:
<Label text="Payers"></Label>
<Input id="payerFrom" showSuggestion="true" placeholder="From"
required="true">
</Input>
<Input id="payerTo" showSuggestion="true" placeholder="To"
required="true">
</Input>
<Button text="Query" type="Emphasized" press="queryData">
<layoutData>
<layout:GridData span="XL6 L6 M6 S12" indent="L1 M1 S0"/>
</layoutData>
</Button>

Which SAPUI5 control can be used to display dynamic content in form of Labels or lists?

I am developing a Online Questionnaire application. In this I am using Checkbox and Labels inside a VBox and Hbox control to display the options for my answers. These answer options I am getting them from my questionnaire.json model.
Following is my App.view.xml showing the answers layout:
<VBox id="multipleChoices">
<items>
<HBox backgroundDesign="Solid" alignItems="Center">
<items>
<CheckBox id="mCheckBox0"/>
<Label text="" id="multipleChoice0" width="500px"/>
<CheckBox id="mCheckBox1"/>
<Label text="" id="multipleChoice1" width="500px"/>
</items>
</HBox>
<HBox backgroundDesign="Solid" alignItems="Center">
<items>
<CheckBox id="mCheckBox2"/>
<Label text="" id="multipleChoice2" width="500px"/>
<CheckBox id="mCheckBox3"/>
<Label text="" id="multipleChoice3" width="500px"/>
</items>
</HBox>
</items>
</VBox>
It gets applied in front end as follows:
Q1.png
Q2.png
Problem:
You can see in Q2.png 4 Labels and 4 radio buttons are being displayed even though there are only two answer options. How do I achieve the scenario where the labels's and radio buttons/ check boxes appear in same number as the answer choices and extra ones are hidden?
Is there a dynamic control which can help me with this one?
you should bind your question from your model to a List and a ListItem can have a template with Labels and checkboxs, so you don't need to care about the size of your answers. The way you are doing it at the moment is way too static.
Checkbox has a text property, therefore you could remove the labels and do a binding inside that property
<CheckBox id="mCheckBox1" text="{model/textOption1}"/>
<CheckBox id="mCheckBox2" text="{model/textOption1}"/>

ZK layout issue

I have issue with making below layout. Please provide me some code example how to create below layout. As the screenshot depict I need two part equally sized. Left part containing the latin text and right side the radio buttons and rest. The "From" teksts should be left aligned and the amounts and icons should be right alligned. How do I construct this layout best way in ZK and in ZK way ?
Screenshot Example
You can see below code for demo purpose and adjust component according to your requirments
<zk>
<window border="normal" title="hello" apply="pkg$.TestComposer" width="100%" height="100%">
<hbox heights="40%,20%,40%" width="100%" height="100%">
<borderlayout width="100%" height="100%">
<center>
Here is My Content
</center>
</borderlayout>
<borderlayout width="100%" height="100%">
<center>
<vbox widths="30%,30%,30%" width="100%" height="100%">
<checkbox />
<checkbox />
<checkbox />
</vbox>
</center>
</borderlayout>
<splitter width="100%"/>
<borderlayout width="100%" height="100%">
<center>
<vbox widths="30%,30%,30%" width="100%" height="100%">
<label value = "hariom123"/>
<label value = "hariom123"/>
<label value = "hariom123"/>
</vbox>
</center>
</borderlayout>
</hbox>
</window>
</zk>
You can run above code in Zk Fiddle
It kills me to respond to this answer given the level of detail you provided. In the future please do post some code showing what you've tried and why it doesn't work. With that, we can quickly get you back on track. Your question here is just fishing for code =/
<hlayout hflex="1">
<!--
size/flex on labels doesn't work, wrap label in a div to control size
-->
<div hflex="1">
<label value="lorem ipsum.."/>
</div>
<grid hflex="1">
<columns>
<!--
Last column is small, first two share available space.
-->
<column>
<column>
<column width="30px">
</columns>
<rows>
<row>
<radio label="This is a radio button"/>
<label value="From: 100,00 $"/>
<image src="info.png"/>
<row>
<row>
<radio label="This is a radio button 2"/>
<label value="From: 200,00 $"/>
<image src="info.png"/>
<row>
<row>
<radio label="This is a radio button 3"/>
<label value="0,00 $"/>
<image src="info.png"/>
<row>
</rows>
</grid>
</hlayout>
There are many other ways to get this layout. I chose a grid next to a div so the radio buttons, labels, and icons on the right are guaranteed to line up. You have other options though.
PS: of course you will need to apply CSS to make the ZK grid less gaudy.