我使用Material-UI
创建了一个可选择的组件let SelectableInfiniteList = makeSelectable(Infinite);
并将ListItem放入其中,现在我想更改所选项目的默认灰色,但我不知道如果我给它一个className
<ListItem className="list-item" primaryText={i}/>
并使用list-item:焦点选择器我可以改变背景颜色,只要它被聚焦(但是如果我点击应用程序中的其他地方)焦点会丢失并且灰色显示在(仍然)选中项目,
有没有办法更改所选的项目背景颜色?
答案 0 :(得分:6)
在您的高阶组件中添加新属性selectedItemStyle!
- (void)layoutSubviews
{
[super layoutSubviews];
//...custom layout here
}
其中selectedItemStyle是
<ComposedComponent selectedItemStyle={selectedItemStyle} value={this.state.selectedIndex} onChange={this.handleRequestChange} containerHeight={this.props.containerHeight} elementHeight={40}>
{this.props.children}
</ComposedComponent>
答案 1 :(得分:3)
我必须使用“全局主题”替代:https://material-ui.com/customization/components/#global-theme-override
const muiTheme = createMuiTheme({
overrides: {
MuiListItem: {
root: {
"&$selected": {
backgroundColor: "red",
"&:hover": {
backgroundColor: "orange",
},
},
},
button: {
"&:hover": {
backgroundColor: "yellow",
},
},
},
},
});
答案 2 :(得分:1)
如果您对不全局覆盖样式的方法感兴趣,
import clsx from 'clsx';
import { makeStyles } from '@material-ui/core/styles';
const useStyles = makeStyles({
root: {
'&$selected': {
backgroundColor: 'red',
'&:hover': {
backgroundColor: 'yellow',
}
},
},
selected: {},
});
const CustomSelectedListItem = (
<ListItem
button
classes={{ root: classes.root, selected: classes.selected }}
selected
>
<ListItemText primary="List Item" />
</ListItem>
);
Codesandbox。 Material-UI docs。
答案 3 :(得分:0)
通过传递selected
这样的样式来更改默认选择的灰色。
<ListItem
button
selected={true}
classes={{ selected: classes.active }}>
<ListItemText primary={item.name} />
</ListItem>
样式对象应该是这样的。
active: {
backgroundColor: "red"
}
答案 4 :(得分:0)
如果您喜欢本地自定义样式,则可以用material-ui
(https://material-ui.com/customization/components/#overriding-styles-with-classes)覆盖classes
的组件样式
ListItem
的CSS部分,我们知道...
selected .Mui-selected Pseudo-class applied to the root element if selected={true}.
...
The rule name we would override is: selected
// For example
const useStyles = makeStyles((theme) => ({
listItemSelected: {
color: 'red',
},
}));
ListItem
的{{1}} classes
如果您要为其覆盖全局样式,请遵循:
答案 5 :(得分:0)
您可以使用Mui全局主题覆盖,该覆盖将基本上使用样式属性覆盖项目中的所有ListItems-
MuiMenuItem: {
root: {
fontFamily: 'Aria....',
'&$selected': {
backgroundColor: '#B2D0EB!important'
},
'&:hover': {
backgroundColor: '#B2D0EB!important',
color: '#707070!important',
}
},
}
但是,如果希望所选组件具有不同的样式,也可以使用id /类名
答案 6 :(得分:0)
您可以使用Mui全局主题覆盖,该覆盖将基本上使用样式属性覆盖项目中的所有ListItems-
MuiMenuItem: {
root: {
fontFamily: 'Aria....',
'&$selected': {
backgroundColor: '#B2D0EB!important'
},
'&:hover': {
backgroundColor: '#B2D0EB!important',
color: '#707070!important',
}
},
}
但是,如果希望所选组件具有不同的样式,也可以使用id /类名