2016-11-17 2 views
0

So schreibe ich meine eigene benutzerdefinierte Ansicht, die einen TextView und einen EditText enthält. Was ich versuche, der Benutzer einen Textstil für jeden individuell, wie dies eingestellt zu tun ist, lassen:Akzeptieren eines Textstils für eine benutzerdefinierte Ansicht

<declare-styleable name="InputRow"> 
    <attr name="descriptionTextStyle" format="string" /> 
    <attr name="valueTextStyle" format="string" /> 
</declare-styleable> 

ich gedacht funktionieren würde, so dass in XML ich sagen könnte:

app:descriptionTextStyle="bold" 
app:valueTextStyle="italic" 

Das Problem tritt jedoch auf, wenn ich versuche, aus dem typisierten Array zu lesen. Ich kann die Zeichenfolge erhalten:

if(typedArray.hasValue(R.styleable.InputRow_descriptionTextStyle)) { 
    setDescriptionTextStyle(typedArray.getString(R.styleable.InputRow_descriptionTextStyle)); 
} 

aber wenn ich descriptionTextView.setTypeface(Typeface tf, int style) anrufen will ich brauche einen Integer-Wert für den zweiten Parameter, die ich nicht habe.

Ich kann den Stil nicht ändern, um ein int-Format zu sein, weil dann ="bold" ungültig wäre, so bin ich ratlos, wie man den Textstil bekommt.

+0

siehe attrs Datei '/platforms/android-XX/data/res/Werte/attrs.xml' und finden' textStyle' – pskink

+0

@pskink oooh okay, ich glaube, ich bin auf etwas hier dank – AdamMc331

+0

und doch konnte man add '' in deinem '' gibt es keine Möglichkeit zwei verschiedene 'android: textStyles' mit einem anderen Namen/Alias ​​zu verwenden – pskink

Antwort

2

Sie die Methode

public void setTypeface(Typeface tf); 

verwenden können, bedarf es nur eine Schrift Parameter.

Auch Zeichenfolge für die Umwandlung von der Schriftart Sie etwas tun können:

switch (typefaceString) { 
case SANS: 
tf = Typeface.SANS_SERIF; 
break; 

case SERIF: 
tf = Typeface.SERIF; 
break; 

case MONOSPACE: 
tf = Typeface.MONOSPACE; 
break; 
} 
0

Dank der Anregung von pskink, nahm ich einen Blick darauf, wie Android definiert die Art:

<!-- Default text typeface style. --> 
<attr name="textStyle"> 
    <flag name="normal" value="0" /> 
    <flag name="bold" value="1" /> 
    <flag name="italic" value="2" /> 
</attr> 

Gegeben dass ich konnte meine benutzerdefinierte Attribute entsprechend aktualisieren:

<attr name="descriptionTextStyle"> 
    <flag name="normal" value="0" /> 
    <flag name="bold" value="1" /> 
    <flag name="italic" value="2" /> 
</attr> 

Dann war ich abl e, um meinen Artikel einzurichten, indem ich app:descriptionTextStyle="bold" anrufen und in der Klasse rufe ich typedArray.getInt() an und rufe die setTypeface() Methode auf, wie ich sagte. Danke für die Hilfe!

+0

tun und denken Sie daran, wenn Sie nur einen solchen attr möchten, können Sie vorhandene '' – pskink

+0

Richtig, aber ich nicht, weil ich verschiedene attrs auf das TextView und den editiertext @ pskink anwenden möchte – AdamMc331

Verwandte Themen