30

テキストビューの色を設定したいカスタムビューがあります。

私は持っている

attrs.xml

<declare-styleable name="PropertyView">
    <attr name="propertyTitle" format="string" localization="suggested" />
    <attr name="showTitle" format="boolean" />
    <attr name="propertyTextColor" format="color" />
    <attr name="propertyTextSize" format="dimension" />
</declare-styleable>

レイアウトファイルに設定しました

<com.something.views.PropertyView
    android:id="@+id/dwf_rAwayTeamTimePenaltyInput"
    style="@style/mw"
    propertyview:propertyTextSize="16sp"
    propertyview:propertyTitle="@string/AwayTeam"
    propertyview:showTitle="true"
    propertyview:propertyTextColor="@color/textLight" />

そして私のコードで私はそれを設定しました

    TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.PropertyView, 0, 0);

    showTitle = a.getBoolean(R.styleable.PropertyView_showTitle, false);
    String title = a.getString(R.styleable.PropertyView_propertyTitle);
    float textSize = a.getDimension(R.styleable.PropertyView_propertyTextSize, -1);
    int color = a.getColor(R.styleable.PropertyView_propertyTextColor, -1);
    textSize = textSize / getResources().getDisplayMetrics().scaledDensity;
    if(BuildConfig.DEBUG) Log.e(getClass().getName(), "Color set to: " + color);

    setShowTitle(showTitle);
    setTitle(title);
    if(textSize >= 0) mTitleTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
    if(color != -1) mTitleTextView.setTextColor(color);

    a.recycle();

しかし、色は -1 を返し続けます。また、色を #000 に設定しようとしましたが、これを行うと、値が -16777216 になります

a.getInteger と a.getInt も試しました

この問題や提案を経験した人はいますか?

解決策、アレックス・フーのおかげ

getColor は参照を処理できません

それは今働いています

ColorStateList color = a.getColorStateList(R.styleable.PropertyView_propertyTextColor);
mTitleTextView.setTextColor(color);
4

3 に答える 3

21

例では色への参照を使用していますが、 attrs.xml ファイルによると、そのプロパティは参照ではなく色の種類である必要があります。これがおそらく、16 進数のカラー コードを使用すると機能するのに、参照を使用すると -1 が返される理由です。

形式を参照に変更する場合は、取得するメソッドも に変更する必要がありa.getColor()ますa.getColorStateList()

于 2013-07-17T13:29:49.427 に答える