从stylable读取sp

时间:2018-05-16 15:00:33

标签: android

我有一个自定义视图,我需要从xml(样式)传递sp值。 我尝试了什么:

styleable.xml:

<declare-styleable name="TagView">
    <attr name="tagText" format="string"/>
    <attr name="tagTextSize" format="dimension"/>
    <attr name="tagTextColor" format="color" />
</declare-styleable>

我在哪里得到这个attr:

private fun setAttrs(context: Context?, attrs: AttributeSet?) {

        val typedArray = context?.obtainStyledAttributes(attrs, R.styleable.TagView, 0, 0)

        if(typedArray!=null) {
            val tagText = typedArray.getString(R.styleable.TagView_tagText)
            val tagSize = typedArray.getDimensionPixelSize(R.styleable.TagView_tagTextSize, 0)
            val tagTextColor = typedArray.getColor(R.styleable.TagView_tagTextColor, Color.WHITE)

            if(tagText != null) {
                nameTextView?.text = tagText
            }

            if(tagSize != 0 ) {
                nameTextView?.textSize = tagSize.toFloat()
            }

            nameTextView?.setTextColor(tagTextColor)
        }
        typedArray?.recycle()
    }

但它并没有得到sp值(密度相关)的真实性......例如:如果我设置15sp它不会是15sp,而是一个非常大的尺寸和不是密度独立的大小。

我尝试typedArray.getDimension(R.styleable.TagView_tagTextSize, 0f),但结果相同......

1 个答案:

答案 0 :(得分:3)

请尝试以下方法:

SELECT COUNT(*) 
  FROM Invoice AS I
  JOIN Sign S1 
    ON I.sign = S1.sign_code
  JOIN ( SELECT T.invoice_year, T.invoice_number
              , SUM(T.amount*S2.sign_value) as sm
           FROM Taking T
           JOIN Sign S2 
          GROUP BY T.invoice_year, T.invoice_number 
       ) t
   ON T.invoice_year   = I.invoice_year 
  AND T.invoice_number = I.invoice_number
  AND I.amount*S1.sign_value <> t.sm

Reference