我正在尝试扩展LinearLayout以用作复合组件。我遵循了本教程:link
这似乎很简单。但是,当我尝试给组件充气时,它总是会失败。我从logCat得到的错误是找不到我的班级。就我所知,就我所见,android在自己的组件中搜索我的组件(我不确定此处的正确措辞,请在下面提供),这对我来说似乎很奇怪。
我编写的代码如下:
主要(当前活动):
//just the ordinary autogenerated eclipse code... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
我的扩展线性布局:
public class DialPadView extends LinearLayout { public DialPadView(Context ctx, AttributeSet attr) { super(ctx, attr); } @Override protected void onFinishInflate() { super.onFinishInflate(); ((Activity)getContext()).getLayoutInflater().inflate(R.layout.dialpadview, this); }
}
我的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" > <whalenut.testinflate.DialPadView android:id="@+id/mydialpad" android:layout_width="fill_parent" android:layout_height="fill_parent" /></LinearLayout>
最后是我的与我的复合组件一起使用的Dialpadview.xml文件:
中><?xml version="1.0" encoding="utf-8"?> <DialPadView xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="test"/> </DialPadView>
当然我所有的课程文件都位于程序包whalenut.testinflate
logCat这样说:
java.lang.RuntimeException:无法启动活动ComponentInfo {whalenut.testinflate / whalenut.testinflate.TestInflateActivity}:android.view.InflateException:二进制XML文件第2行:膨胀类DialPadView的错误
...
由:android.view.InflateException:二进制XML文件第2行:膨胀类DialPadView时出错
...
由以下原因造成:java.lang.ClassNotFoundException:加载程序dalvik.system.PathClassLoader中的android.view.DialPadView [/data/app/whalenut.testinflate-2.apk]
为什么Dalvik(?)在包android.view
中而不是whalenut.testinflate中搜索我的类,当我在xml文件中提供了完全限定的类名时,是因为它没有找不到从那里开始吗?总之,为什么我不能,或者更确切地说我如何在android中扩展扩展版式?
我正在尝试扩展LinearLayout以用作复合组件。我遵循了本教程:链接,这似乎很简单。但是,当我尝试给组件充气时,它不会全部...
您需要按以下方式更改DialPadView: