Кнопка подкласса с Android: много ошибок
Я пытался подкласс Button
, но у меня много ошибок при запуске моего проекта. Не могли бы вы взглянуть и сказать мне, как это исправить? (У меня может быть 50 ошибок)
package my.project.name;
import android[...]
public class MyButton extends Button {
public MyButton(){
super(null);
}
public MyButton(Context context){
super(context);
}
public MyButton(Context context, AttributeSet attrs){
super(context, attrs);
}
public MyButton(Context context, AttributeSet attrs, int defStyle){
super(context, attrs, defStyle);
}
@Override
protected void onDraw(Canvas canvasObject) {
super.onDraw(canvasObject);
int x = 100;
int y = 100;
int width = 80;
int height = 200;
Paint thePaint = new Paint();
thePaint.setColor(Color.WHITE);
RectF rectangle1 = new RectF(x,y,x+width,y+height);
canvasObject.drawRoundRect(rectangle1, 10.0f, 10.0f, thePaint);
}
}
основной класс:
package my.project.name;
import android.app.Activity;
import android.os.Bundle;
public class MyProjectActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
и XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<MyButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/myb"
android:tag="tag"
/>
</LinearLayout>
РЕДАКТИРОВАТЬ: на самом деле, прямоугольник не отображается, подкласс работает, потому что у меня нет ошибки, но прямоугольник просто не виден, даже с фоном "@null"...
большое спасибо
2 ответа
Решение
Переименовать
<MyButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/myb"
android:tag="tag"
/>
в полностью определенное пространство имен
<namespace.from.button.MyButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/myb"
android:tag="tag"
/>
Использование полного имени для элемента в макете XML не работает, если ваш подкласс Button является внутренним классом. Если это так, вам нужно добавить атрибут класса и использовать общее представление для имени элемента.
<view
class="my.project.name.MyProjectActivity$MyButton"
...
http://developer.android.com/guide/topics/ui/custom-components.html