Ionic 4 使用自定义图标更改 ion-tab-button
Ionic 4 change ion-tab-button with custom icon
我正在尝试在单击 ion-tab-button
后使用自定义 src 更改 ion-icon
我已经尝试过,使用(点击)事件触发功能并更改离子图标内的 [src]="..."
有什么好的方法可以改变这种hackish风格吗?
HTML:
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button tab="news/home" (click)="changeNewsIcon()">
<ion-icon [src]="newsIcon"></ion-icon>
<ion-label class="tab-title">News</ion-label>
</ion-tab-button>
<ion-tab-button tab="user" (click)="changeSearchIcon()">
<ion-icon [src]="searchIcon"></ion-icon>
<ion-label class="tab-title">Search</ion-label>
</ion-tab-button>
<ion-tab-button tab="networking" (click)="changeNetworkIcon()">
<ion-icon [src]="notiIcon"></ion-icon>
<ion-label class="tab-title">Networking</ion-label>
</ion-tab-button>
<ion-tab-button tab="chat" (click)="changeChatIcon()">
<ion-icon [src]="chatIcon"></ion-icon>
<ion-label class="tab-title">Chat</ion-label>
</ion-tab-button>
<ion-tab-button tab="profile" (click)="changeProfIcon()">
<ion-icon [src]="profIcon"></ion-icon>
<ion-label class="tab-title">Profile</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
TS :
newsIcon = './assets/tabs/home.svg';
searchIcon = './assets/tabs/search.svg';
notiIcon = './assets/tabs/group.svg';
chatIcon = './assets/tabs/chat.svg';
profIcon = './assets/tabs/user.svg';
changeNewsIcon(): void {
// change news icon
this.newsIcon = './assets/tabs/clicked-home.svg';
// reset others icon
this.searchIcon = './assets/tabs/search.svg';
this.notiIcon = './assets/tabs/group.svg';
this.chatIcon = './assets/tabs/chat.svg';
this.profIcon = './assets/tabs/user.svg';
}
changeSearchIcon(): void {
// change user icon
this.searchIcon = './assets/tabs/clicked-search.svg';
// reset others icon
this.newsIcon = './assets/tabs/home.svg';
this.notiIcon = './assets/tabs/group.svg';
this.chatIcon = './assets/tabs/chat.svg';
this.profIcon = './assets/tabs/user.svg';
}
...
如果有人愿意提供帮助,我们将不胜感激
我不确定我的方法是否更好,但这可能是做同样事情的另一种方法。
HTML:
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button tab="news/home" (click)="changeNewsIcon()">
<ion-icon [src]="isNewsSelected ? newsIcon : clickedNewsIcon"></ion-icon>
<ion-label class="tab-title">News</ion-label>
</ion-tab-button>
<ion-tab-button tab="user" (click)="changeSearchIcon()">
<ion-icon [src]="isSearchSelected ? searchIcon clickedSearchIcon"></ion-icon>
<ion-label class="tab-title">Search</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
TypeScript 组件:
export class SomeComponent {
newsIcon = './assets/tabs/home.svg';
clickedNewsIcon = './assets/tabs/clicked-home.svg';
searchIcon = './assets/tabs/search.svg';
clickedSsearchIcon = './assets/tabs/clicked-search.svg';
isNewsSelected = false;
isSearchSelected= false;
changeNewsIcon(): void {
resetAll();
this.isNewsSelected = true;
}
changeSearchIcon(): void {
resetAll();
this.isSearchSelected = true;
}
resetAll(){
this.isNewsSelected = false;
this.isSearchSelected= false;
}
}
之前,我尝试用离子图标将css颜色放入ion-tab-button
和ion-icon
中。颜色按预期变化,但自定义图标没有变化。
<ion-tab-button tab="news/home" style="color: blue">
<ion-icon name="home"></ion-icon>
<ion-label class="tab-title">News</ion-label>
</ion-tab-button>
一天后,我尝试检查为什么如果我们喜欢这种方法,自定义图标不会改变颜色。然后我尝试检查 Adobe Illustrator CC 中的 Ionic SVG 图标层。就是这样。
如您所见,第 1 层(Ionic 图标)内有 <path>
问题出在我的 SVG 文件上。要使用 css 属性使其工作,我只需要编辑图层。
这是图层编辑后的效果,效果不错:)
解决方法:你只需要添加颜色css并获得正确的图层SVG图标
此外,我将更新如何在选项卡处于活动状态时使用自定义图标。
UPDATE 2:
这是有效的 html 代码:
<ion-tabs>
<ion-tab-bar class="tab-bar" slot="bottom">
<ion-tab-button tab="news/home">
<ion-icon class="icon-news" src="./assets/tabs/md-custom-home.svg"></ion-icon>
<ion-label class="tab-title">News</ion-label>
</ion-tab-button>
<ion-tab-button tab="search">
<ion-icon class="icon-search" src="./assets/tabs/md-custom-search.svg"></ion-icon>
<ion-label class="tab-title">Search</ion-label>
</ion-tab-button>
<ion-tab-button tab="networking">
<ion-icon class="icon-networking" src="./assets/tabs/md-custom-networking.svg"></ion-icon>
<ion-label class="tab-title">Networking</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
SCSS:
ion-tab-button {
--color: #000000;
--color-selected: #00cee5;
}
只要确保使用正确的 SVG ;)
第一个 html:
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button tab="home" (click)="changeIcon('home')">
<ion-icon [hidden]="!activeHomepage" name="md-homepage"></ion-icon>
<ion-icon [hidden]="activeHomepage" name="md-homepage-inactive"></ion-icon>
<ion-label></ion-label>
</ion-tab-button>
<ion-tab-button tab="info" (click)="changeIcon('info')">
<ion-icon [hidden]="!activeInfo" name="md-info"></ion-icon>
<ion-icon [hidden]="activeInfo" name="md-info-inactive"></ion-icon>
<ion-label></ion-label>
</ion-tab-button>
<ion-tab-button tab="inbox" (click)="changeIcon('inbox')">
<ion-icon [hidden]="!activeNotification" name="md-notification"></ion-icon>
<ion-icon [hidden]="activeNotification" name="md-notification-inactive"></ion-icon>
<ion-label></ion-label>
</ion-tab-button>
<ion-tab-button tab="profile" (click)="changeIcon('profile')">
<ion-icon [hidden]="!activeProfile" name="md-profile"></ion-icon>
<ion-icon [hidden]="activeProfile" name="md-profile-inactive"></ion-icon>
<ion-label></ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
TYPESCRIPT:
activeHomepage = false;
activeInfo = false;
activeNotification = false;
activeProfile = false;
constructor() {
this.activeHomepage = true;
}
添加此功能:
changeIcon(page) {
if (page == 'home') {
this.activeHomepage = true;
this.activeProfile = false;
this.activeNotification = false;
this.activeInfo = false;
} else if (page == 'info') {
this.activeHomepage = false;
this.activeProfile = false;
this.activeNotification = false;
this.activeInfo = true;
} else if (page == 'inbox') {
this.activeHomepage = false;
this.activeProfile = false;
this.activeNotification = true;
this.activeInfo = false;
}
else {
this.activeHomepage = false;
this.activeProfile = true;
this.activeNotification = false;
this.activeInfo = false;
}
}
result
它很简单并且工作正常。谢谢 :)
我正在尝试在单击 ion-tab-button
后使用自定义 src 更改 ion-icon
我已经尝试过,使用(点击)事件触发功能并更改离子图标内的 [src]="..."
有什么好的方法可以改变这种hackish风格吗?
HTML:
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button tab="news/home" (click)="changeNewsIcon()">
<ion-icon [src]="newsIcon"></ion-icon>
<ion-label class="tab-title">News</ion-label>
</ion-tab-button>
<ion-tab-button tab="user" (click)="changeSearchIcon()">
<ion-icon [src]="searchIcon"></ion-icon>
<ion-label class="tab-title">Search</ion-label>
</ion-tab-button>
<ion-tab-button tab="networking" (click)="changeNetworkIcon()">
<ion-icon [src]="notiIcon"></ion-icon>
<ion-label class="tab-title">Networking</ion-label>
</ion-tab-button>
<ion-tab-button tab="chat" (click)="changeChatIcon()">
<ion-icon [src]="chatIcon"></ion-icon>
<ion-label class="tab-title">Chat</ion-label>
</ion-tab-button>
<ion-tab-button tab="profile" (click)="changeProfIcon()">
<ion-icon [src]="profIcon"></ion-icon>
<ion-label class="tab-title">Profile</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
TS :
newsIcon = './assets/tabs/home.svg';
searchIcon = './assets/tabs/search.svg';
notiIcon = './assets/tabs/group.svg';
chatIcon = './assets/tabs/chat.svg';
profIcon = './assets/tabs/user.svg';
changeNewsIcon(): void {
// change news icon
this.newsIcon = './assets/tabs/clicked-home.svg';
// reset others icon
this.searchIcon = './assets/tabs/search.svg';
this.notiIcon = './assets/tabs/group.svg';
this.chatIcon = './assets/tabs/chat.svg';
this.profIcon = './assets/tabs/user.svg';
}
changeSearchIcon(): void {
// change user icon
this.searchIcon = './assets/tabs/clicked-search.svg';
// reset others icon
this.newsIcon = './assets/tabs/home.svg';
this.notiIcon = './assets/tabs/group.svg';
this.chatIcon = './assets/tabs/chat.svg';
this.profIcon = './assets/tabs/user.svg';
}
...
如果有人愿意提供帮助,我们将不胜感激
我不确定我的方法是否更好,但这可能是做同样事情的另一种方法。
HTML:
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button tab="news/home" (click)="changeNewsIcon()">
<ion-icon [src]="isNewsSelected ? newsIcon : clickedNewsIcon"></ion-icon>
<ion-label class="tab-title">News</ion-label>
</ion-tab-button>
<ion-tab-button tab="user" (click)="changeSearchIcon()">
<ion-icon [src]="isSearchSelected ? searchIcon clickedSearchIcon"></ion-icon>
<ion-label class="tab-title">Search</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
TypeScript 组件:
export class SomeComponent {
newsIcon = './assets/tabs/home.svg';
clickedNewsIcon = './assets/tabs/clicked-home.svg';
searchIcon = './assets/tabs/search.svg';
clickedSsearchIcon = './assets/tabs/clicked-search.svg';
isNewsSelected = false;
isSearchSelected= false;
changeNewsIcon(): void {
resetAll();
this.isNewsSelected = true;
}
changeSearchIcon(): void {
resetAll();
this.isSearchSelected = true;
}
resetAll(){
this.isNewsSelected = false;
this.isSearchSelected= false;
}
}
之前,我尝试用离子图标将css颜色放入ion-tab-button
和ion-icon
中。颜色按预期变化,但自定义图标没有变化。
<ion-tab-button tab="news/home" style="color: blue">
<ion-icon name="home"></ion-icon>
<ion-label class="tab-title">News</ion-label>
</ion-tab-button>
一天后,我尝试检查为什么如果我们喜欢这种方法,自定义图标不会改变颜色。然后我尝试检查 Adobe Illustrator CC 中的 Ionic SVG 图标层。就是这样。
如您所见,第 1 层(Ionic 图标)内有 <path>
问题出在我的 SVG 文件上。要使用 css 属性使其工作,我只需要编辑图层。
这是图层编辑后的效果,效果不错:)
解决方法:你只需要添加颜色css并获得正确的图层SVG图标
此外,我将更新如何在选项卡处于活动状态时使用自定义图标。
UPDATE 2:
这是有效的 html 代码:
<ion-tabs>
<ion-tab-bar class="tab-bar" slot="bottom">
<ion-tab-button tab="news/home">
<ion-icon class="icon-news" src="./assets/tabs/md-custom-home.svg"></ion-icon>
<ion-label class="tab-title">News</ion-label>
</ion-tab-button>
<ion-tab-button tab="search">
<ion-icon class="icon-search" src="./assets/tabs/md-custom-search.svg"></ion-icon>
<ion-label class="tab-title">Search</ion-label>
</ion-tab-button>
<ion-tab-button tab="networking">
<ion-icon class="icon-networking" src="./assets/tabs/md-custom-networking.svg"></ion-icon>
<ion-label class="tab-title">Networking</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
SCSS:
ion-tab-button {
--color: #000000;
--color-selected: #00cee5;
}
只要确保使用正确的 SVG ;)
第一个 html:
<ion-tabs>
<ion-tab-bar slot="bottom">
<ion-tab-button tab="home" (click)="changeIcon('home')">
<ion-icon [hidden]="!activeHomepage" name="md-homepage"></ion-icon>
<ion-icon [hidden]="activeHomepage" name="md-homepage-inactive"></ion-icon>
<ion-label></ion-label>
</ion-tab-button>
<ion-tab-button tab="info" (click)="changeIcon('info')">
<ion-icon [hidden]="!activeInfo" name="md-info"></ion-icon>
<ion-icon [hidden]="activeInfo" name="md-info-inactive"></ion-icon>
<ion-label></ion-label>
</ion-tab-button>
<ion-tab-button tab="inbox" (click)="changeIcon('inbox')">
<ion-icon [hidden]="!activeNotification" name="md-notification"></ion-icon>
<ion-icon [hidden]="activeNotification" name="md-notification-inactive"></ion-icon>
<ion-label></ion-label>
</ion-tab-button>
<ion-tab-button tab="profile" (click)="changeIcon('profile')">
<ion-icon [hidden]="!activeProfile" name="md-profile"></ion-icon>
<ion-icon [hidden]="activeProfile" name="md-profile-inactive"></ion-icon>
<ion-label></ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
TYPESCRIPT:
activeHomepage = false;
activeInfo = false;
activeNotification = false;
activeProfile = false;
constructor() {
this.activeHomepage = true;
}
添加此功能:
changeIcon(page) {
if (page == 'home') {
this.activeHomepage = true;
this.activeProfile = false;
this.activeNotification = false;
this.activeInfo = false;
} else if (page == 'info') {
this.activeHomepage = false;
this.activeProfile = false;
this.activeNotification = false;
this.activeInfo = true;
} else if (page == 'inbox') {
this.activeHomepage = false;
this.activeProfile = false;
this.activeNotification = true;
this.activeInfo = false;
}
else {
this.activeHomepage = false;
this.activeProfile = true;
this.activeNotification = false;
this.activeInfo = false;
}
}
result 它很简单并且工作正常。谢谢 :)