2014-10-20 2 views
1

Здесь есть активность и в этой деятельности создается только один пользовательский видКак установить customview в макете в андроида

public class MainActivity extends Activity { 
MyCustomDrawableView myCustomDrawableView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    myCustomDrawableView = new MyCustomDrawableView(this); 
    setContentView(R.layout.activity_main); 
    myCustomDrawableView = (MyCustomDrawableView)findViewById(R.id.hello); 
} 

public class MyCustomDrawableView extends View { 
    private ShapeDrawable myDrawable; 

    public MyCustomDrawableView(Context context) { 
     super(context); 
     int x = 10; 
     int y = 10; 
     int width = 100; 
     int height = 100; 

     myDrawable = new ShapeDrawable(new OvalShape()); 
     myDrawable.getPaint().setColor(0xff74fA23); 
     myDrawable.setBounds(x, y, x + width, y + height); 
    } 

    protected void onDraw(Canvas canvas) { 
     myDrawable.draw(canvas); 
    } 
    } 
} 

затем в макете создать customview следующим

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<com.mobiloitte.sampleapp.MainActivity.MyCustomDrawableView 
    android:id="@+id/hello" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

здесь я получение класса не обнаружено исключение

10-20 13:00:33.594: E/AndroidRuntime(542): Caused by: java.lang.ClassNotFoundException: com.mobiloitte.sampleapp.MainActivity.MyCustomDrawableView 

справка по услугам

+1

Держите MyCustomDrawableView в отдельном файле класса –

ответ

2

Лучше использовать отдельный класс (не должен быть внутренним классом) для пользовательского представления.

Для текущей проблемы, попробуйте с

<com.mobiloitte.sampleapp.MainActivity$MyCustomDrawableView 

обновления для текущего выпуска android.view.InflateException

Вам нужно добавить еще один конструктор для пользовательского вида

public MyCustomDrawableView(Context context, AttributeSet st) { 
    super(context, st); 
    // Do other initial tasks, like you did into MyCustomDrawableView(Context context). 
} 
+0

Wh y статический? Я никогда не использовал статический класс для представления. –

+0

@StephaneMathis Удалено. Если это представление будет использоваться только в одной активности, то это нормально. Но если вы используете эту внутреннюю версию представления в другую деятельность, ей нужен экземпляр внешнего (класс активности), поэтому лучше использовать статику. Это только для внутренней версии. –

+0

Ошибка @PankajKumar: ошибка синтаксического анализа XML: неверно сформирован (недопустимый токен), получая эту проблему с вашим ответом – Prabha1

Смежные вопросы