如何在Android中为TextView设置样式中的padding?

3
在我的安卓应用中,我想创建一个具有padding属性的样式。我正在使用以下代码:
<style name="title_numbering">
    <item name="android:padding">20dp</item>
    <item name="android:textColor">#b60000</item>
</style>

Java:

    TextView num = new TextView(this);
    num.setText(String.format("%d", index+1));
    num.setTextAppearance(this, R.style.title_numbering);

文字颜色似乎是起作用的,但内边距却没有。

有人知道如何修复这个问题吗?

谢谢。

2个回答

0

仔细查看了 TextViewsetTextAppearance() 方法后,我发现 TextView 并没有从 style 中读取与 padding 相关的属性。这就是为什么来自样式的 padding 不起作用的原因。

以下是更好理解的 TextView 方法。从 setTextAppearance() 方法中调用 applyTextAppearance() 方法。

private void applyTextAppearance(TextAppearanceAttributes attributes) {
    if (attributes.mTextColor != null) {
        setTextColor(attributes.mTextColor);
    }

    if (attributes.mTextColorHint != null) {
        setHintTextColor(attributes.mTextColorHint);
    }

    if (attributes.mTextColorLink != null) {
        setLinkTextColor(attributes.mTextColorLink);
    }

    if (attributes.mTextColorHighlight != 0) {
        setHighlightColor(attributes.mTextColorHighlight);
    }

    if (attributes.mTextSize != -1) {
        mTextSizeUnit = attributes.mTextSizeUnit;
        setRawTextSize(attributes.mTextSize, true /* shouldRequestLayout */);
    }

    if (attributes.mTextLocales != null) {
        setTextLocales(attributes.mTextLocales);
    }

    if (attributes.mTypefaceIndex != -1 && !attributes.mFontFamilyExplicit) {
        attributes.mFontFamily = null;
    }
    setTypefaceFromAttrs(attributes.mFontTypeface, attributes.mFontFamily,
            attributes.mTypefaceIndex, attributes.mTextStyle, attributes.mFontWeight);

    if (attributes.mShadowColor != 0) {
        setShadowLayer(attributes.mShadowRadius, attributes.mShadowDx, attributes.mShadowDy,
                attributes.mShadowColor);
    }

    if (attributes.mAllCaps) {
        setTransformationMethod(new AllCapsTransformationMethod(getContext()));
    }

    if (attributes.mHasElegant) {
        setElegantTextHeight(attributes.mElegant);
    }

    if (attributes.mHasFallbackLineSpacing) {
        setFallbackLineSpacing(attributes.mFallbackLineSpacing);
    }

    if (attributes.mHasLetterSpacing) {
        setLetterSpacing(attributes.mLetterSpacing);
    }

    if (attributes.mFontFeatureSettings != null) {
        setFontFeatureSettings(attributes.mFontFeatureSettings);
    }

    if (attributes.mFontVariationSettings != null) {
        setFontVariationSettings(attributes.mFontVariationSettings);
    }
}

-1

你需要在使用的drawable中应用padding。

<item android:top="10px" android:right="10px">

编辑:

填充对形状没有影响。相反,应该这样写。

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:top="10px" android:right="10px" android:drawable="@drawable/myPic"/>
</layer-list>

你的意思是这必须在一个形状标签中吗? - omega
经过8年11个月,我遇到了同样的问题,而且与答案根本不接近。 - Krrishnaaaa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接