2016-08-15 5 views
2

So habe ich meine Toggle Schaltfläche in meine AppBar, die ein Problem verursacht, da sie die gleiche Farbe haben, wenn die Toggle ausgewählt ist.Wie ändere ich die Farbe der Material-UI's Toggle

Ich habe viele verschiedene Dinge ausprobiert (wie unten gezeigt), konnte aber die Farbe nicht ändern.

import React from 'react'; 
 
import Toggle from 'material-ui/Toggle' 
 
import Drawer from 'material-ui/Drawer'; 
 
import AppBar from 'material-ui/AppBar'; 
 
import MenuItem from 'material-ui/MenuItem'; 
 
import getMuiTheme from 'material-ui/styles/getMuiTheme'; 
 
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; 
 

 
var Style = 
 
{ 
 
    palette: 
 
    { 
 
     primary1Color: '#ffffff', 
 
    }, 
 
}; 
 

 
class AppBarComp extends React.Component { 
 

 
    constructor() { 
 
    super(); 
 
    this.state = { 
 
     open: false 
 
    }; 
 
    } 
 

 
    getChildContext() { 
 
    return {muiTheme: getMuiTheme(Style)}; 
 
    } 
 

 
    handleToggle =() => this.setState({open: !this.state.open}); 
 

 
    handleClose =() => this.setState({open: false}); 
 

 
    render() { 
 
    return <MuiThemeProvider muiTheme={getMuiTheme()}> 
 
     <div> 
 
     <AppBar 
 
      onLeftIconButtonTouchTap={this.handleToggle} 
 
      title="Time Visualizer" 
 
      iconElementRight={ 
 
      <Toggle 
 
       labelStyle={{color:'white'}} 
 
       style={{marginTop:'.75em'}} 
 
       label="Toggle Compare" 
 
      /> 
 
      }/> 
 

 
     <Drawer 
 
      docked={false} 
 
      width={250} 
 
      open={this.state.open} 
 
      onRequestChange={(open) => this.setState({open})} 
 
     > 
 
     <MenuItem onTouchTap={this.handleClose}>Settings</MenuItem> 
 
      <MenuItem onTouchTap={this.handleClose}>About</MenuItem> 
 
     </Drawer> 
 
     </div> 
 
    </MuiThemeProvider> 
 
    } 
 
} 
 

 
AppBarComp.childContextTypes ={ 
 
    muiTheme: React.PropTypes.object, 
 
}; 
 
export default AppBarComp;

Ich bin nicht wirklich sicher, wie ich auf dieses Element zu bekommen, es ist die Farbe zu ändern. Mit Chrome konnte ich das Element untersuchen und seine Farbe ändern, konnte dies jedoch mit Code nicht wiederholen.

Ich war auch nicht in der Lage, die Toggle programmgesteuert zu zentrieren, aber in der Lage, es in Chrom zu tun, was glauben lässt, ich bin nicht hoch genug in dem Objekt?

Wenn das Sinn macht.

Danke!

Antwort

7

Wenn Sie Toggle Farbe wollen in ‚On-Modus‘ ändern, müssen Sie die Farben in dem Thema aktualisieren:

const muiTheme = getMuiTheme({ 
    toggle: { 
    thumbOnColor: 'yellow', 
    trackOnColor: 'red' 
    } 
}); 

und dann verwenden Sie es :)

<MuiThemeProvider muiTheme={muiTheme}> 

Sie können hier überprüfen, was anderes Thema Material wird durch Umschalten verwendet: https://github.com/callemall/material-ui/blob/master/src/Toggle/Toggle.js

ich weiß nicht, ob das der einzige Weg, dies zu tun, aber es scheint zu funktionieren :) es könnte Problem sein, obwohl, wenn eine andere Steuerung verwendet diese Farbe Pfad:/

ändern Farbe des Toggle-in 'Aus-Modus' ist einfacher:

<Toggle 
    thumbStyle={{ backgroundColor: 'red' }} 
    trackStyle={{ backgroundColor: 'green' }} /> 

Hoffe, es hilft :)

+0

Das war genau das, wonach ich suchte! Könnten Sie mir vielleicht sagen, wie Sie zu dieser Lösung gekommen sind? Ich weiß, für das nächste Mal? –

+0

Comments Felder scheint zu klein für das, was ich schreiben wollte, aber ich werde versuchen, die kurze Version: Geöffnet Toggle.js, um zu überprüfen, wie die Stile angewendet werden. Gefunden etw wie 'thumbWhenSwitched' habe 'backgroundColor'.Das war das einzige Feld, das etwas mit Farben zu tun hat;) Der Wert wird von' toggle.thumbOnColor' übernommen und 'toggle' wird vom Theme genommen (am Anfang der Datei wird es von' zugewiesen context.muiTheme'). Wenn dieser Wert von 'theme.toggle übernommen wird.thumbOnColor' dann versuchte ich es im Theme selbst zu ändern und es funktionierte: D (gleiche Geschichte mit 'trackWhenSwitched') Hoffe das hilft :) –

+0

Der' thumbStyle' 'trackStyle' Trick ist super! Ich habe dies verwendet, um die Farben des Aus-Modus auf den Ein-Modus für einen Kippschalter zu setzen, den ich habe, um das Farbschema in meiner App zu ändern. So ist links das aktuelle Farbschema und wenn Sie den Schalter nach rechts ziehen, werden die Farben des neuen geladenen muiTheme aufgenommen. – shaz

-1

Die Farbe des Material-UI-Schalters ist auf primary1Color eingestellt, die Sie durch Erstellen eines benutzerdefinierten Designs übersteuern können. http://www.material-ui.com/#/customization/themes

Sie würden wollen ein Stile machen das Objekt irgendwo (eine separate Datei ist wahrscheinlich am besten), der enthält ein Objekt wie folgt aus:

{ 
    palette: { 
     primary1Color: '#YOURCOLOR', 
    }, 
} 

Sie Angenommen importieren, dass in Ihrem als Stile Reagieren Klasse, Sie Würd es als Thema wie folgt festlegen möchten:

getChildContext() { 
     return { 
      muiTheme: getMuiTheme(Styles), 
     }; 
    } 

Und

YOUR_CLASS.childContextTypes = { 
    muiTheme: React.PropTypes.object, 
}; 
+0

Also habe ich das Objekt als eine Konstante erstellt und anschließend den Rest Ihrer Anweisungen, aber ich bin immer noch nicht in der Lage, die Farbe zu ändern. Ich habe die Fragen aktualisiert meine aktuellen Code –

+0

Stil zu zeigen, sollte nur das Objekt sein { Palette: { primary1Color: ‚# 00BCD5‘, }, } Sie die Ausgabe von getMuiTheme als Parameter übergeben to getMuiTheme – jhonvolkd

+0

Ich habe den obigen Code bearbeitet. Ich bekomme keine Fehler, aber es ändert immer noch nicht die Farbe des Toggle :(Was fehlt mir hier? –

0

Alles, was Sie

thumbSwitchedStyle={{ backgroundColor: 'grey' }} 

Beispiel

<Toggle 
    thumbSwitchedStyle={{ backgroundColor: 'grey' }} 
    labelStyle={{color:'white'}} 
    style={{marginTop:'.75em'}} 
    label="Toggle Compare" 
tun müssen

Also, wenn ausgewählt die Farbe wird grau :)

image

Verwandte Themen