我创建了一个自定义组件。这是代码
html_5_spinner.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<EditText
android:id="@+id/spinText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
<requestFocus />
</EditText>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<Button
android:id="@+id/upBtn"
android:layout_width="25dp"
android:layout_height="15dp"
android:background="@android:drawable/arrow_up_float" />
<Button
android:id="@+id/downBtn"
android:layout_width="25dp"
android:layout_height="15dp"
android:background="@android:drawable/arrow_down_float" />
</LinearLayout>
</LinearLayout>
HTML5Spinner.java
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
public class HTML5Spinner extends LinearLayout {
private EditText spinText;
private Button upBtn, downBtn;
public HTML5Spinner(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onFinishInflate()
{
super.onFinishInflate();
((Activity)getContext()).getLayoutInflater().inflate(R.layout.html5_spinner, this);
setupViewItems();
}
private void setupViewItems()
{
spinText = (EditText)findViewById(R.id.spinText);
upBtn = (Button)findViewById(R.id.upBtn);
downBtn = (Button)findViewById(R.id.downBtn);
//Register Listeners
upBtn.setOnClickListener(new UpButtonAction());
}
private class UpButtonAction implements OnClickListener
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("workn", "It is running");
}
}
}
主要活动是使用上面的cusom组件。它只有一个XML,没有业务逻辑或GUI渲染Java代码
activity_main.xml中
<ScrollView
android:id="@+id/scroller"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TableLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stretchColumns="*" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/radioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:drawablePadding="5dp"
android:text="RadioButton" />
<com.nFlate.nflate.HTML5Spinner
android:id="@+id/aasaas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></com.nFlate.nflate.HTML5Spinner>
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/radioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:drawablePadding="5dp"
android:text="RadioButton" />
<com.nFlate.nflate.HTML5Spinner
android:id="@+id/aasaas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></com.nFlate.nflate.HTML5Spinner>
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TableRow>
<TableRow
android:id="@+id/tableRow4"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TableRow>
</TableLayout>
</ScrollView>
</RelativeLayout>
运行时不会出错。但是eclipse在activity_main.xml
以下是错误
Exception raised during rendering: com.android.layoutlib.bridge.android.BridgeContext cannot be cast to android.app.Activity
Exception details are logged in Window > Show View > Error Log
java.lang.ClassCastException: com.android.layoutlib.bridge.android.BridgeContext cannot be cast to android.app.Activity
at com.xxx.xxx.HTML5Spinner.onFinishInflate(HTML5Spinner.java:27)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:754)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:718)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:749)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:718)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:749)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:718)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:749)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:718)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:749)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:718)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:372)
以下是显示此错误的位置。
由于此错误,GUI未显示在eclipse 图形布局中。这是为什么?
答案 0 :(得分:0)
在你的onFinishInflate
中,有一个有问题的演员:
((Activity)getContext())
Eclipse图形布局呈现Context
不是Activity
的视图。无论如何你不应该需要这个演员阵容。
答案 1 :(得分:-1)
您缺少渲染微调器的库。在项目中包含该库。请将库导入工作区以便正常工作,并在项目属性的android选项中标记此库。主要问题是没有正确地包括库。
答案 2 :(得分:-2)
如果在你的清单文件中HTML5Spinner.java注册为一个活动,那么它必须扩展Activity类型的东西才能继续,但这里使用了LinearLayout,所以这些不会启动..因为xml GUI aslo给出了ClassCastException的错误.. < / p>