2016-09-14 16 views
0

Androidスタジオのコンテキストメニューを使用して新しいカスタムビューを作成しています。新しいビューを追加するとビルドが壊れます。なぜAndroid Studioはビルドを壊すコードを追加しますか?Androidスタジオでカスタムビューブレークを追加する

私はAndroid Studio 2.1.3を使用しています。

次のようにプロセスが行く...

  1. 私は右の私のsrc/javaの/ [my_package]フォルダをクリックしてください。
  2. 私は新しい> UIコンポーネント>カスタムビューを打つ
  3. その後のダイアログで私は私のビューに名前をつけ、enterを押します。
  4. ここ
Error:(7) No resource identifier found for attribute 'exampleColor' in package 'com.username.appname' 
Error:(7) No resource identifier found for attribute 'exampleDimension' in package 'com.username.appname' 
Error:(7) No resource identifier found for attribute 'exampleDrawable' in package 'com.username.appname' 
Error:(7) No resource identifier found for attribute 'exampleString' in package 'com.username.appname' 

...私はプロジェクトを作るヒットし、私は次のエラーを取得するAndroidのメーカーが作成したクラスです。私はユーザとアプリ名の情報を変更することを除いて、ここでは一行のコードに触れていません。

私はエラーがRのファイルのように解決できないようです。

package com.username.appname; 

import android.content.Context; 
import android.content.res.TypedArray; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.drawable.Drawable; 
import android.text.TextPaint; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.LinearLayout; 

import com.example.ringtonegenerator.R; 

/** 
* TODO: document your custom view class. 
*/ 
public class SwipeLayout extends LinearLayout { 
    private String mExampleString; // TODO: use a default from R.string... 
    private int mExampleColor = Color.RED; // TODO: use a default from R.color... 
    private float mExampleDimension = 0; // TODO: use a default from R.dimen... 
    private Drawable mExampleDrawable; 

    private TextPaint mTextPaint; 
    private float mTextWidth; 
    private float mTextHeight; 

    public SwipeLayout(Context context) { 
     super(context); 
     init(null, 0); 
    } 

    public SwipeLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(attrs, 0); 
    } 

    public SwipeLayout(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(attrs, defStyle); 
    } 

    private void init(AttributeSet attrs, int defStyle) { 
     // Load attributes 
     final TypedArray a = getContext().obtainStyledAttributes(
       attrs, R.styleable.SwipeLayout, defStyle, 0); 

     mExampleString = a.getString(
       R.styleable.SwipeLayout_exampleString); 
     mExampleColor = a.getColor(
       R.styleable.SwipeLayout_exampleColor, 
       mExampleColor); 
     // Use getDimensionPixelSize or getDimensionPixelOffset when dealing with 
     // values that should fall on pixel boundaries. 
     mExampleDimension = a.getDimension(
       R.styleable.SwipeLayout_exampleDimension, 
       mExampleDimension); 

     if (a.hasValue(R.styleable.SwipeLayout_exampleDrawable)) { 
      mExampleDrawable = a.getDrawable(
        R.styleable.SwipeLayout_exampleDrawable); 
      mExampleDrawable.setCallback(this); 
     } 

     a.recycle(); 

     // Set up a default TextPaint object 
     mTextPaint = new TextPaint(); 
     mTextPaint.setFlags(Paint.ANTI_ALIAS_FLAG); 
     mTextPaint.setTextAlign(Paint.Align.LEFT); 

     // Update TextPaint and text measurements from attributes 
     invalidateTextPaintAndMeasurements(); 
    } 

    private void invalidateTextPaintAndMeasurements() { 
     mTextPaint.setTextSize(mExampleDimension); 
     mTextPaint.setColor(mExampleColor); 
     mTextWidth = mTextPaint.measureText(mExampleString); 

     Paint.FontMetrics fontMetrics = mTextPaint.getFontMetrics(); 
     mTextHeight = fontMetrics.bottom; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     // TODO: consider storing these as member variables to reduce 
     // allocations per draw cycle. 
     int paddingLeft = getPaddingLeft(); 
     int paddingTop = getPaddingTop(); 
     int paddingRight = getPaddingRight(); 
     int paddingBottom = getPaddingBottom(); 

     int contentWidth = getWidth() - paddingLeft - paddingRight; 
     int contentHeight = getHeight() - paddingTop - paddingBottom; 

     // Draw the text. 
     canvas.drawText(mExampleString, 
       paddingLeft + (contentWidth - mTextWidth)/2, 
       paddingTop + (contentHeight + mTextHeight)/2, 
       mTextPaint); 

     // Draw the example drawable on top of the text. 
     if (mExampleDrawable != null) { 
      mExampleDrawable.setBounds(paddingLeft, paddingTop, 
        paddingLeft + contentWidth, paddingTop + contentHeight); 
      mExampleDrawable.draw(canvas); 
     } 
    } 

    /** 
    * Gets the example string attribute value. 
    * 
    * @return The example string attribute value. 
    */ 
    public String getExampleString() { 
     return mExampleString; 
    } 

    /** 
    * Sets the view's example string attribute value. In the example view, this string 
    * is the text to draw. 
    * 
    * @param exampleString The example string attribute value to use. 
    */ 
    public void setExampleString(String exampleString) { 
     mExampleString = exampleString; 
     invalidateTextPaintAndMeasurements(); 
    } 

    /** 
    * Gets the example color attribute value. 
    * 
    * @return The example color attribute value. 
    */ 
    public int getExampleColor() { 
     return mExampleColor; 
    } 

    /** 
    * Sets the view's example color attribute value. In the example view, this color 
    * is the font color. 
    * 
    * @param exampleColor The example color attribute value to use. 
    */ 
    public void setExampleColor(int exampleColor) { 
     mExampleColor = exampleColor; 
     invalidateTextPaintAndMeasurements(); 
    } 

    /** 
    * Gets the example dimension attribute value. 
    * 
    * @return The example dimension attribute value. 
    */ 
    public float getExampleDimension() { 
     return mExampleDimension; 
    } 

    /** 
    * Sets the view's example dimension attribute value. In the example view, this dimension 
    * is the font size. 
    * 
    * @param exampleDimension The example dimension attribute value to use. 
    */ 
    public void setExampleDimension(float exampleDimension) { 
     mExampleDimension = exampleDimension; 
     invalidateTextPaintAndMeasurements(); 
    } 

    /** 
    * Gets the example drawable attribute value. 
    * 
    * @return The example drawable attribute value. 
    */ 
    public Drawable getExampleDrawable() { 
     return mExampleDrawable; 
    } 

    /** 
    * Sets the view's example drawable attribute value. In the example view, this drawable is 
    * drawn above the text. 
    * 
    * @param exampleDrawable The example drawable attribute value to use. 
    */ 
    public void setExampleDrawable(Drawable exampleDrawable) { 
     mExampleDrawable = exampleDrawable; 
    } 
} 
+0

エラーが表示される場所を表示できますか? –

+0

このスレッドでは私の質問が答えました。そこに向かうプロトコルは何ですか? http://stackoverflow.com/questions/5819369/error-no-resource-identifier-found-for-attribute-adsize-in-package-com-googl – ScottF

+0

あなた自身の質問を閉じてください。それを編集して、他の質問へのリンクを入れ、これを複製としてクローズすることを説明することもできます。 –

答えて

0

このメニューから新しいビューを追加すると、スタジオにはコードとリソースのサンプルが追加されます。追加しないサンプルコード参照属性の一部が表示されます。リソースファイルに必要なリソース(exampleColorなど)を提供するか、サンプル参照を実際のものに変更する必要があります。

+0

うん。私はそれが属性を適切に作成するか、単にそれらを全く参照しないかのどちらかが好きです。これは、ビルド不可能なコードを作成するツールを持っているよりも理にかなっているようです... – ScottF

+0

@ScottF - 私はAS 2.1.3も使用しています。生成するコードはエラーがありません。多分何かが起こっているでしょう。いずれかのリソースファイルでエラーを探します。おそらく、生成されたコードと既存のコードとの間に名前の衝突があります。 (あなたがあなたのために生成した最初の新しいカスタムビューコードでなければ、確かに可能です。) –

+0

Hmm interesting。これは間違いなく私がこのプロジェクトで作成した最初のカスタムビューです。しかし、ASがそれを正しく行う可能性を持っていることを知ることは良いことです。あなたのコードは私のものとマッチしますか? – ScottF

関連する問題