2016-11-17 17 views
0

私は独自のカスタムビューを作成しています。そのビューにはTextViewとその中のEditTextの両方があります。 XMLに私が言うことができるようにカスタムビューのテキストスタイルを受け入れる

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

私は、これが働くだろうと思った:

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

私は何をしようとしていると、ユーザーは個別に各1用のテキストスタイルを設定し、このように聞かせてさしかし、型付き配列から読み込もうとしているときに問題が発生します。私は、文字列を取得できます。

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

を私はdescriptionTextView.setTypeface(Typeface tf, int style)を呼び出したいとき、私は私が持っていない2番目のパラメータのための整数値を必要とします。

="bold"が無効になるため、スタイルをint形式に変更できません。そのため、テキストスタイルを取得する方法が失われています。

+0

がattrsには、 ' /プラットフォーム/アンドロイド-XX /データ/ resを/値/ attrs.xml'を提出し、見つけご覧' textStyle' – pskink

+0

@pskinkうーん大丈夫私はここで何か感謝 – AdamMc331

+0

に上だと思うし、しかし、あなたは可能性あなたの 'の中に' 'を追加してください。別の名前とエイリアスを持つ二つの異なるandroid:textStyleを使用する方法はありません – pskink

答えて

2

あなたは

public void setTypeface(Typeface tf); 

メソッドを使用することができ、それが唯一の書体パラメータが必要です。あなたはこのような何かできる書体の文字列に変換する。また

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

考える:pskinkからの提案へ

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

case SERIF: 
tf = Typeface.SERIF; 
break; 

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

おかげで、私はAndroidのスタイルを定義する方法を見ていましたそれに応じてカスタム属性を更新することができました:

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

私はablでした私の商品をapp:descriptionTextStyle="bold"と呼んで設定し、クラスIではtypedArray.getInt()と電話し、私が言ったようにsetTypeface()メソッドを呼び出します。助けてくれてありがとう!

+0

とそのようなattrを1つしか持たないことを覚えておいてください。既存の '' – pskink

+0

右、 TextViewとedittext @ pskinkに異なるattrsを適用できるようにしたいからです – AdamMc331

関連する問題