#sapui5
#sapui5
Вопрос:
Как я могу поместить свой значок рядом с полем ввода или внутри него?
Проблема в том, что значок меняет форму. Обычно это выглядит так:
Но когда я добавляю значок (код ниже), он вытесняет поле ввода Dauer.
Есть ли способ сделать его чистым, и это рядом с ним? Или лучше в поле ввода внутри?
Я могу уменьшить кнопку с помощью CSS, но между ними все еще остается пробел .. И он не перемещается автоматически.
Лучшее решение похоже на приведенную выше базу данных с маленьким значком внутри, где я могу щелкнуть или как значок рядом с Dauer без зазора между полем ввода от Dauer и ?
значком.
PS: Я просто хочу, чтобы это было так (позже я решу, какой вариант лучше. Но это возможно?)
<form:SimpleForm id="neuezeiterfassung"
editable="true"
title="Neue Zeiterfassung anlegen"
>
<Label
text="Auftrag"
class="font1"
tooltip="Auftrag eingeben"
/>
<l:VerticalLayout>
<ComboBox id="Auftrag"
items="{/ZAUFKSet}"
showSecondaryValues="true"
width="50%"
>
<core:ListItem text="{Aufnr}" />
</ComboBox>
</l:VerticalLayout>
<Label
text="Datum"
class="font1"
/>
<DatePicker id="DP3"
valueFormat="dd.MM.yyyy"
displayFormat="medium"
width="50%"
placeholder="dd.mm.yyyy"
/>
<Label class="font1" text="Dauer" />
<Input id="dauer"
class="dauer"
placeholder="Dauer eingeben ... "
width="50%"
/>
<HBox class="sapUiSmallMargin">
<core:Icon
src="sap-icon://sys-help"
class="size1" color="#031E48" press="aseads"
>
<core:layoutData>
<FlexItemData growFactor="1" />
</core:layoutData>
</core:Icon>
</HBox>
<!-- <Button icon="sap-icon://sys-help" class="myButton"/> -->
<Label class="font1" text="Arbeitsbeschreibung" />
<TextArea id="beschreibung" width="50%" />
</form:SimpleForm>
Ответ №1:
Обновление: с изменением в commit: 8f1757d
, которое доступно с UI5 1.84, значение значка справки может быть изменено через valueHelpIconSrc
:
<Input showValueHelp="true"
valueHelpIconSrc="sap-icon://sys-help"
valueHelpRequest="alert('Help requested')"
/><!-- valueHelpIconSrc available since 1.84.0 -->
В этом случае нет необходимости расширять sap.m.InputBase
. Другие элементы управления вводом, такие как sap.m.MaskInput
, все еще нуждаются в расширении, как показано в приведенном ниже разделе.
Оригинальный ответ:
Лучшее решение похоже на приведенную выше базу данных с маленьким значком внутри, на который я могу нажать. (…) Возможно ли это?
Да, это возможно. Вот минимальный пример: https://embed.plnkr.co/EzlF2tkvalJWvSEn
Для этого UI5 предоставляет защищенный addEndIcon
api, что означает, что его следует использовать только при расширении sap.m.InputBase
!
В качестве аргумента для addEndIcon
вы можете передать карту настроек, которые требуются для создания sap.ui.core.Icon
api, который легко настраивается.
const icon = this.addEndIcon({
id: this.getId() "-questionMarkBtn",
src: IconPool.getIconURI("sys-help"),
noTabStop: true,
tooltip: "Information",
press: [this.onEndButtonPress, this],
}); // See sap.ui.core.Icon/properties for more settings
// icon.addStyleClass(...); if even more customization required..
Ответ №2:
Вы можете добиться этого, используя приведенный ниже код, просто обновив CSS в соответствии с вашими требованиями. Это адаптивный дизайн, он будет работать на всех устройствах.
код
<VBox class="sapUiSmallMargin">
<f:SimpleForm
editable="true"
layout="ResponsiveGridLayout"
title="Neue Zeiterfassung anlegen"
labelSpanXL="3"
labelSpanL="3"
labelSpanM="3"
labelSpanS="12"
adjustLabelSpan="false"
emptySpanXL="1"
emptySpanL="1"
emptySpanM="1"
emptySpanS="0"
columnsXL="1"
columnsL="1"
columnsM="1"
singleContainerFullSize="false" >
<f:content>
<Label text="Auftrag" tooltip="Auftrag eingeben" />
<ComboBox items="{/ZAUFKSet}" id="Auftrag" showSecondaryValues="true">
<core:ListItem text="{Aufnr}"/>
</ComboBox>
<Label text="Datum" labelFor="DP3"/>
<DatePicker id="DP3" valueFormat="dd.MM.yyyy" displayFormat="medium" placeholder="dd.mm.yyyy"/>
<Label class="font1" text="Dauer"/>
<Input value="Street">
<layoutData>
<l:GridData span="XL7 L7 M7 S10" />
</layoutData>
</Input>
<Button icon="sap-icon://sys-help" press="onPress" >
<layoutData>
<l:GridData span="XL1 L1 M1 S2" />
</layoutData>
</Button>
<Label text="Arbeitsbeschreibung"/>
<TextArea id="beschreibung"/>
</f:content>
</f:SimpleForm>
</VBox>
Вывод:
Если вы ищете вывод ниже
<f:SimpleForm
editable="true"
layout="ResponsiveGridLayout"
title="Neue Zeiterfassung anlegen"
labelSpanXL="3"
labelSpanL="3"
labelSpanM="3"
labelSpanS="12"
adjustLabelSpan="false"
emptySpanXL="1"
emptySpanL="1"
emptySpanM="1"
emptySpanS="0"
columnsXL="1"
columnsL="1"
columnsM="1"
singleContainerFullSize="false" >
<f:content>
<Label text="Auftrag" tooltip="Auftrag eingeben" />
<ComboBox items="{/ZAUFKSet}" id="Auftrag" showSecondaryValues="true">
<core:ListItem text="{Aufnr}"/>
<layoutData>
<l:GridData span="XL8 L8 M7 S9" />
</layoutData>
</ComboBox>
<Label text="Datum" labelFor="DP3"/>
<DatePicker id="DP3" valueFormat="dd.MM.yyyy" displayFormat="medium"
placeholder="dd.mm.yyyy">
<layoutData>
<l:GridData span="XL8 L8 M7 S9" />
</layoutData>
</DatePicker>
<Label class="font1" text="Dauer"/>
<Input value="Street">
<layoutData>
<l:GridData span="XL8 L8 M7 S9" />
</layoutData>
</Input>
<Button icon="sap-icon://sys-help" press="onPress" width="40px" >
<layoutData>
<l:GridData span="XL1 L1 M1 S3" />
</layoutData>
</Button>
<Label text="Arbeitsbeschreibung"/>
<TextArea id="beschreibung">
<layoutData>
<l:GridData span="XL8 L8 M7 S9" />
</layoutData>
</TextArea>
</f:content>
</f:SimpleForm>
С помощью значка
<VBox class="sapUiSmallMargin">
<f:SimpleForm
editable="true"
layout="ResponsiveGridLayout"
title="Neue Zeiterfassung anlegen"
labelSpanXL="3"
labelSpanL="3"
labelSpanM="3"
labelSpanS="12"
adjustLabelSpan="false"
emptySpanXL="1"
emptySpanL="1"
emptySpanM="1"
emptySpanS="0"
columnsXL="1"
columnsL="1"
columnsM="1"
singleContainerFullSize="false" >
<f:content>
<Label text="Auftrag" tooltip="Auftrag eingeben" />
<ComboBox items="{/ZAUFKSet}" id="Auftrag" showSecondaryValues="true">
<core:ListItem text="{Aufnr}"/>
<layoutData>
<l:GridData span="XL10 L10 M10 S10" />
</layoutData>
</ComboBox>
<Label text="Datum" labelFor="DP3"/>
<DatePicker id="DP3" valueFormat="dd.MM.yyyy" displayFormat="medium" placeholder="dd.mm.yyyy">
<layoutData>
<l:GridData span="XL10 L10 M10 S10" />
</layoutData>
</DatePicker>
<Label class="font1" text="Dauer"/>
<Input value="Street">
<layoutData>
<l:GridData span="XL10 L10 M10 S10" />
</layoutData>
</Input>
<HBox>
<core:Icon src="sap-icon://sys-help" color="#031E48" press="onPress" class="infoIcon"/>
<layoutData>
<l:GridData span="XL1 L1 M1 S1" />
</layoutData>
</HBox>
<Label text="Arbeitsbeschreibung"/>
<TextArea id="beschreibung">
<layoutData>
<l:GridData span="XL10 L10 M10 S10" />
</layoutData>
</TextArea>
</f:content>
</f:SimpleForm>
</VBox>
Если вы используете значок, вам также необходимо добавить стиль для выравнивания
.infoIcon {
line-height: 3rem;
}
Комментарии:
1. Спасибо! да, это умная форма.. я действительно не понимаю.. я пробую, как и вы, но проблема с labelspanXL и и.. я просто не понимаю, почему и когда. Я сделал это также с помощью css.. Но на самом деле он не реагирует.. я получил значок и сделал его таким:
#__hbox0-cont0_1{ margin-left: -16% !important; }
но он не реагирует.. я пытаюсь немного обойти.. не получается заставить это работать. Может быть, вы что-нибудь знаете? Если я уменьшу размер своих окон, они переместятся с того места, где я их размещаю.2. Я не использую smart form, это
SimpleForm
только. Я просто используюlayoutData
withl:GridData
для достижения функциональности. Вы можете просмотреть образцы и нажать значок редактирования. Что именно вы ищете?3. Я добавил новый скриншот и обновил код, надеюсь, вы ищете то же решение.
4. аааа, спасибо.. я думал, что это smartform .. я попробовал .. и немного поиграл.. может быть, вы можете объяснить своим собственным словом, что такое labelSpanXl, labelspanL … empty .. и так далее? я действительно не понимаю. потому что вы используете
l:GirdData span..
место, где вы устанавливаете свои данные .. и я действительно этого не понимаю. А также я использую<core:Icon
вместо кнопки, но это должно работать следующим образом. Я действительно ценю ваше время и помощь5. Я также обновил свой код для значка, пожалуйста, ознакомьтесь с ним. Когда дело доходит до
labelspanL
средств — каким будет диапазон меток для больших устройств. То же самое относится кXL
очень большим,M
средним иS
маленьким устройствам. Если вы наблюдаете за выводом для разных размеров, на небольших устройствах метка будет отображаться в виде полной строки. Это из-заlabelSpanS="12"
. Каждая строка будет иметь 12 интервалов, вы просто управляете интервалами, чтобы элементы регулировались в зависимости от размеров устройства. Таким образом, макет будет адаптивным.
Ответ №3:
Иногда расширение класса InputBase может быть немного излишним / увеличивать сложность кода.
Вы также можете использовать контейнеры Flexbox для достижения выравнивания ввода и значка.
Например, если вы хотите, чтобы ввод и значок были центрированы по вертикали и горизонтали:
<HBox
alignItems="Center"
justifyContent="Center">
<Input>
<layoutData>
<FlexItemData growFactor="3" />
</layoutData>
</Input>
<core:Icon
src="sap-icon://sys-help">
<!-- Be careful here with the namespaces (use layoutData from core, not m) -->
<core:layoutData>
<FlexItemData growFactor="1" />
</core:layoutData>
</core:Icon>
</HBox>
Это даст что-то вроде этого:
Смотрите Flexbox для получения дополнительных примеров (ссылка на API доступна вверху страницы).