0

我正在尝试创建自定义 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

4

1 回答 1

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);
于 2013-04-15T00:46:25.700 回答