如何访问标准自定义xml属性?

时间:2013-04-14 23:25:12

标签: android xml

我正在尝试创建自定义xml属性,这些属性可以被更多的类接受。我发现(其中包括)这个有用的答案:Defining custom attrs

但是如何以编程方式访问属性? Eclipse似乎没有找到定义的名称:

这是我的attrs.xml,它是'ViewPadding我正在尝试使用:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="ViewPadding" format="integer"/>
<declare-styleable name="IntegerPicker">
    <attr name="maxNrOfDigits" format="integer"/>
    <attr name="NumberSize" format="integer"/>
    <attr name="ViewColor" format="color"/>
    <attr name="TextAlignRight" format="boolean"/>
</declare-styleable>

<declare-styleable name="DoublePicker">
    <attr name="CompoundViewColor" format="color"/>
    <attr name="CompoundViewPadding" format="integer"/>
</declare-styleable>
</resources>

这是我用来访问其他属性的代码:

public IntegerPicker(Context context, AttributeSet attrs) {
    super(context, attrs);

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.integer_picker, this, true);

    etInteger = (EditText) findViewById(R.id.etInteger);

    TypedArray a = context.obtainStyledAttributes(attrs,
            R.styleable.IntegerPicker);

        final int N = a.getIndexCount();
        for (int i = 0; i < N; ++i)
        {
            int attr = a.getIndex(i);
            switch (attr)
            {
            case R.styleable.IntegerPicker_ViewColor:
                int ViewColor = a.getColor(attr, 0);
                this.setBackgroundColor(ViewColor);
                break;
            case R.styleable.IntegerPicker_maxNrOfDigits:
                int ems = a.getInteger(attr, 8);
                etInteger.setEms(ems);
                break;
            case R.styleable.:
                int padding = a.getInteger(attr, 10);
                etInteger.setPadding(padding, padding, padding, padding);
                break;
            case R.styleable.IntegerPicker_NumberSize:
                int NumberSize = a.getInteger(attr, 10);
                etInteger.setTextSize(NumberSize);
                break;
            case R.styleable.IntegerPicker_TextAlignRight:
                boolean textAlignRight = a.getBoolean(attr,false);
                if(textAlignRight){
                    etInteger.setGravity(0x05);
                }else{
                    etInteger.setGravity(0x03);
                }
            }
        }
        a.recycle();

}

我如何处理:

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.integer_picker, this, true);

case R.styleable.IntegerPicker_ViewColor:
                int ViewColor = a.getColor(attr, 0);
                this.setBackgroundColor(ViewColor);

请帮忙,我真的不知所措:S

1 个答案:

答案 0 :(得分:0)

我不是这方面的专家,但您可能希望尝试这样做: (摘自SlidingMenu

attrs.xml

<!--
  Copyright 2011 The Android Open Source Project

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<resources>

    <declare-styleable name="SlidingMenu">
        <attr name="mode">
            <enum name="left" value="0" />
            <enum name="right" value="1" />
        </attr>
        <attr name="viewAbove" format="reference" />
        <attr name="viewBehind" format="reference" />
        <attr name="behindOffset" format="dimension" />
        <attr name="behindWidth" format="dimension" />
        <attr name="behindScrollScale" format="float" />
        <attr name="touchModeAbove">
            <enum name="margin" value="0" />
            <enum name="fullscreen" value="1" />
        </attr>
        <attr name="touchModeBehind">
            <enum name="margin" value="0" />
            <enum name="fullscreen" value="1" />
        </attr>
        <attr name="shadowDrawable" format="reference" />
        <attr name="shadowWidth" format="dimension" />
        <attr name="fadeEnabled" format="boolean" />
        <attr name="fadeDegree" format="float" />
        <attr name="selectorEnabled" format="boolean" />
        <attr name="selectorDrawable" format="reference" />
    </declare-styleable>

</resources>

获取xml属性的代码(在视图构造函数中)

    // get all attributes
    final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.SlidingMenu);
    // extract 1 attribute, of return SlidingMenu.LEFT if no attr was supplied)
    final int mode = ta.getInt(R.styleable.SlidingMenu_mode, SlidingMenu.LEFT);