繁体   English   中英

Android:XML布局中的自定义视图

[英]Android: Custom View in XML-Layout

我正在尝试在布局中添加ListView和Custom View,但是我总是会收到此错误:

“ ...错误夸大了类com.example ...”

没有自定义视图,它将起作用,并且仅显示ListView。


活动:

package com.example.training;

public class PracticeActivity extends ActionBarActivity{
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.practice_layout);
      initListView();  //private function
   }
   //Other stuff
}

自定义视图:

package com.example.training;

public class LinearChart extends View{

  LinearChart(Context context, AttributeSet attrs){
      super(context,attrs);
  }

  LinearChart(Context context){
      super(context);
  }

  LinearChart(Context context, AttributeSet attrs, int defStyle){
      super(context,attrs, defStyle);
  }

  @Override
  protected void onDraw(Canvas canvas) {
      super.onDraw(canvas);
      canvas.drawColor(Color.WHITE);
      Paint paint = new Paint();
      paint.setColor(Color.BLUE);
      paint.setStrokeWidth(10);
      canvas.drawLine(10, 10, 30, 30, paint); 
  }
}

XML的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/practice_listview"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_centerHorizontal="true" >
    </ListView>

    <view
        android:id="@+id/view1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/practice_listview"
        class="com.example.training.LinearChart" />

</RelativeLayout>

您的课程上没有公共的构造函数。 确保覆盖构造函数。 它应该看起来像这样:

  public LinearChart(Context context, AttributeSet attrs){
      super(context,attrs);
  }

  public LinearChart(Context context){
      super(context);
  }

  public LinearChart(Context context, AttributeSet attrs, int defStyle){
      super(context,attrs, defStyle);
  }

注意public修饰符的上瘾。

  <?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ListView
    android:id="@+id/practice_listview"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:layout_centerHorizontal="true" >
</ListView>

<com.example.training.LinearChart
    android:id="@+id/view1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/practice_listview"
     />

  </RelativeLayout>

您需要类的完全限定名称(或使用新的xml名称空间),而不是xml文件中的<view 因此,在此示例中,您的xml可能如下所示:

<com.example.training.LinearChart
    android:id="@+id/view1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

(因此,请删除当前XML中的class:属性)。 然后应该可以正确充气。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM