gpt4 book ai didi

android - 扩充扩展 Layoutclass 的复合组件的问题

转载 作者:行者123 更新时间:2023-11-29 02:11:33 25 4
gpt4 key购买 nike

我正在尝试扩展 LinearLayout 以用作复合组件。我遵循了本教程: link

这看起来相当简单。但是,当我尝试给我的组件充气时,它总是失败。我从 logCat 得到的错误是找不到我的类(class)。据我所知,android 在它自己的组件中搜索我的组件对我来说似乎很奇怪(我不确定这里的措辞是否正确,请在下面查看)。

我写的代码如下:

main(当前 Activity ):

//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:无法启动 Activity ComponentInfo{whalenut.testinflate/whalenut.testinflate.TestInflateActivity}:android.view.InflateException:二进制 XML 文件第 2 行:错误膨胀类 DialPadView

...

Caused by: android.view.InflateException: Binary XML file line #2: 错误膨胀类 DialPadView

...

Caused by: java.lang.ClassNotFoundException: android.view.DialPadView in loader dalvik.system.PathClassLoader[/data/app/whalenut.testinflate-2.apk]

当我在 xml 中给出完全限定的类名时,为什么 Dalvik(?) 在包 android.view 而不是 whalenut.testinflate 中搜索我的类-文件,是不是因为它一开始就找不到它?

简而言之,为什么我不能,或者更确切地说,我如何在 android 中扩展扩展布局?

最佳答案

您需要按如下方式更改 DialPadView:

<merge android:class="com.packageName.UIClassName"
android:id="@+id/DialView"
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"/>
</merge>

然后在你的构造函数中调用它:

super(context, attrs, defStyle);

LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

inflater.inflate(R.layout.DialView, this, true);

然后您可以在主要 Activity 中使用以下内容:

DialView myDialView = new DialView(context);

mainView.addView(myDialView);

希望对您有所帮助!

关于android - 扩充扩展 Layoutclass 的复合组件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7016821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com