Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-向xml布局中的组件添加自定义视图_Android_Xml_View - Fatal编程技术网

Android-向xml布局中的组件添加自定义视图

Android-向xml布局中的组件添加自定义视图,android,xml,view,Android,Xml,View,我有一个从类视图扩展而来的抽象类和4个子类来执行一系列矢量图。然后我有一个带有四个按钮的布局和一个显示图形的视图。根据单击的按钮,应在该视图中绘制不同的图形。问题是,当我点击一个按钮时,整个屏幕上都画满了数字,按钮消失了。这个问题怎么解决 public abstract class DrawFiguresWithDimensions extends View{ public DrawingFiguresWithDimensions(Context context) //... }

我有一个从类视图扩展而来的抽象类和4个子类来执行一系列矢量图。然后我有一个带有四个按钮的布局和一个显示图形的视图。根据单击的按钮,应在该视图中绘制不同的图形。问题是,当我点击一个按钮时,整个屏幕上都画满了数字,按钮消失了。这个问题怎么解决

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));
    }
}