main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=". . .."
/>
<com.ImageButtonTest.ImageButton1
android:id="@+id/image_button_linearlayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
ImageLayout.xml
?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/image_button_linearlayout_background" >
<ImageView
. . .
/>
<ImageView
/>
<ImageView
/>
<ImageView
/>
<ImageView
/>
</LinearLayout>
public class ImageButton1 extends LinearLayout {
private static final String TAG = "ImageButton";
ImageButton1(Context context)
{
this(context, null);
}
ImageButton1(Context context, AttributeSet attrs)
{
super(context, attrs);
init(context);
}
public void init(Context c)
{
LayoutInflater ll = LayoutInflater.from(c);
View imageButtonView = ll.inflate(R.layout.imagebuttonlayout, null);
ImageView writeImageButton = (ImageView) imageButtonView.findViewById(R.id.write_button);
ImageView pictureImageButton = (ImageView) imageButtonView.findViewById(R.id.picture_button);
ImageView groupImageButton = (ImageView) imageButtonView.findViewById(R.id.group_button);
ImageView favoriteImageButton = (ImageView) imageButtonView.findViewById(R.id.favorite_group_button);
ImageView calendarImageButton = (ImageView) imageButtonView.findViewById(R.id.calendar_button);
writeImageButton.setImageResource(R.drawable.write);
pictureImageButton.setImageResource(R.drawable.photo);
groupImageButton.setImageResource(R.drawable.group);
favoriteImageButton.setImageResource(R.drawable.jumpgroup);
calendarImageButton.setImageResource(R.drawable.calendar);
addView(imageButtonView);
}
이렇게 해놨는데 자꾸 에러메시지가...
{com.ImageButtonTest/com.ImageButtonTest.ImageButtonTest}: android.view.InflateException: Binary XML file line #12: Error inflating class com.ImageButtonTest.ImageButton1
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2481)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2497)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1848)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.os.Handler.dispatchMessage(Handler.java:99)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.os.Looper.loop(Looper.java:123)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.app.ActivityThread.main(ActivityThread.java:4338)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at java.lang.reflect.Method.invokeNative(Native Method)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at java.lang.reflect.Method.invoke(Method.java:521)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at dalvik.system.NativeStart.main(Native Method)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class com.ImageButtonTest.ImageButton1
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.view.LayoutInflater.createView(LayoutInflater.java:503)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.app.Activity.setContentView(Activity.java:1622)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at com.ImageButtonTest.ImageButtonTest.onCreate(ImageButtonTest.java:14)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2444)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): ... 11 more
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): Caused by: java.lang.NoSuchMethodException: ImageButton1(Context,AttributeSet)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at java.lang.Class.getMatchingConstructor(Class.java:674)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at java.lang.Class.getConstructor(Class.java:486)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): at android.view.LayoutInflater.createView(LayoutInflater.java:475)
02-11 02:44:41.277: ERROR/AndroidRuntime(4760): ... 21 more
좀 알려주세요 ^^;
{
this(context, null);
}
ImageButton1(Context context, AttributeSet attrs)
{
super(context, attrs);
init(context);
}
생성자는 이렇게 두개 정의 해 놓았는데 에러가 발생해서요.
NoSuchMethodException는 정의된 함수가 없을 때 발생한다고 봤는데.. 생성자는 정의 했는데도 에러가 발생해요
android:id="@+id/image_button_linearlayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
@cooldawn
말씀하신 곳에 xmlns:myspacee="http://schemas.android.com/apk/res/com.ImageButtonTest"
넣었는데 같은 에러가 발생합니다. ㅜㅜ
우선 main.xml 에 LinearLayout 하나 만들어서
mLinearLayout.addView( new ImageButton1(this)); 이런 식으로 하긴 했지만.. 가로로 화면이 꽉차지 않네요..
이미지 크기 만큼만 LinearLayout 크기가 잡히네요..;
두분 답변 감사합니다. 책 보고 인터넷 찾아보고 연구 좀 더 해봐야 겠어요 ^^;