0

カスタム xml 属性を作成しようとしています。これは、複数のクラスで受け入れることができます。私は(とりわけ)この役立つ答えを見つけました:カスタム属性の定義

しかし、プログラムで属性にアクセスするにはどうすればよいですか? 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 に答える