Android-向xml布局中的组件添加自定义视图
我有一个从类视图扩展而来的抽象类和4个子类来执行一系列矢量图。然后我有一个带有四个按钮的布局和一个显示图形的视图。根据单击的按钮,应在该视图中绘制不同的图形。问题是,当我点击一个按钮时,整个屏幕上都画满了数字,按钮消失了。这个问题怎么解决Android-向xml布局中的组件添加自定义视图,android,xml,view,Android,Xml,View,我有一个从类视图扩展而来的抽象类和4个子类来执行一系列矢量图。然后我有一个带有四个按钮的布局和一个显示图形的视图。根据单击的按钮,应在该视图中绘制不同的图形。问题是,当我点击一个按钮时,整个屏幕上都画满了数字,按钮消失了。这个问题怎么解决 public abstract class DrawFiguresWithDimensions extends View{ public DrawingFiguresWithDimensions(Context context) //... }
public abstract class DrawFiguresWithDimensions extends View{
public DrawingFiguresWithDimensions(Context context)
//...
}
public class DrawRectangleWithDimensions extends DrawFiguresWithDimensions {..}
public class DrawTWithDimensions extends DrawFiguresWithDimensions {..}
public class DrawDobleTWithDimensions extends DrawFiguresWithDimensions {..}
public class DrawBoxWithDimensions extends DrawFiguresWithDimensions {..}
下面是“activity_main.xml”:
您不能期望通过在xml布局中引用抽象类来实例化抽象类 您需要指定一个具体的实现,以使其正常工作 因此,您可以在布局中提供某种类型的视图组,作为任何具体的DrawFigures的父视图,该DrawFigures的尺寸实现是基于所按下的按钮来显示的 然后,动态删除与父视图组关联的当前子视图组,并添加与按下的按钮对应的子视图组 基本上,您需要在activity_main.xml布局中替换此选项:
<View class="com.tari.drawfigureswithdimensions.DrawFiguresWithDimensions"
android:id="@+id/viewDatosSec"
android:layout_weight="8"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
您的自定义视图将在加载布局后立即实例化,因此不允许使用抽象类 下面是一个在xml中包含自定义视图的示例。
迈克尔,谢谢你的评论。我在布局中创建了一个包含四个DrawFigures和Dimensions视图的视图组,但我仍然停留在如何以友好方式实现代码上。您能告诉我如何使用DrawRectangleWithDimensions在公共void btnSecRec(View-View){}中执行此操作吗?@David我刚刚更新了我的答案,提供了有关如何在父视图组中动态放置视图的更多信息。谢谢Michael!这就解决了问题!谢谢你这么具体,这对像我这样的初学者很好。当然-很高兴能帮上忙。你介意接受我的回答吗?谢谢
public class MainActivity extends Activity {
DrawRectangleWithDimensions sec1;
DrawTWithDimensions sec2;
DrawDoubleTWithDimensions sec3;
DrawBoxWithDimensions sec4;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void btnSecRec(View view){
sec1 = new DrawRectangleWithDimensions(this);
sec1.setFigure(10, 40);
setContentView(sec1);
}
public void btnSecT(View view){
sec2 = new DrawTWithDimensions(this);
sec2.setFigure(100, 20, 20, 70);
setContentView(sec2);
}
public void btnSecDobleT(View view){
sec3 = new DrawDoubleTWithDimensions(this);
sec3.setFigure(100, 20, 20, 90, 50, 25);
setContentView(sec3);
}
public void btnSecCajon(View view){
sec4 = new DrawBoxWithDimensions(this);
sec4.setFigure(100, 20, 20, 80);
setContentView(sec4);
}
<View class="com.tari.drawfigureswithdimensions.DrawFiguresWithDimensions"
android:id="@+id/viewDatosSec"
android:layout_weight="8"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<RelativeLayout
android:id="@+id/viewDatosSec"
android:layout_weight="8"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
@Override
public void onClick(View v)
{
int id = v.getId();
if (id == R.id.btnSecCajon)
{
RelativeLayout parent = (RelativeLayout)findViewById(R.id.viewDatosSec);
parent.removeAllViews();
parent.addView(new DrawBoxWithDimensions(this));
}
}