Android类扩展了MainActivity上的View和Placement

时间:2015-09-11 13:38:34

标签: android android-layout android-fragments android-intent android-activity

我在将视图放入主要活动时遇到了麻烦,我所做的是,

我有一个文件Lines.java,在这个文件中,我们有绘制圆的所有功能,这个圆类扩展了视图  如下图所示

public class Lines extends View {
Paint paint = new Paint();

public Views(Context context) {
    super(context);
    paint.setColor(Color.BLACK);
}
@Override
protected void onDraw(Canvas canvas)
{
      canvas.drawLine(0, 0, 20, 20, paint);
      System.out.println("called");
}}

现在在MainActivity中我正在创建这个圆类的对象并将其放入setcontentview(obj);

下面的

是该

的代码段
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Linesobj=new Lines(getApplicationContext());
    setContentView(obj);
}

}

当我这样做时,它需要整个屏幕,我不想要那个,我想将它放入我使用this链接尝试通过xml的主要活动中,我附上了MainActivity的图片,我想把这个观点放在活动的中间 红色矩形显示我想要放置的行类(即视图)

非常感谢您的帮助! !

Red rectangle shows where I want to place Lines class(View)

XML文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.compoundview.MainActivity" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Line" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Free" />


    </LinearLayout>

    <com.example.compoundview.Views
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

1 个答案:

答案 0 :(得分:2)

它接管整个视图的原因是因为这是您在致电setContentView时所做的事情。来自文档:

  

将活动内容设置为显式视图。此视图直接放在活动的视图层次结构中。

因此,您在XML中的任何内容(无论是LinearLayout,RelativeLayout等)都将被您的自定义视图替换。要解决此问题,您需要以编程方式将视图添加到现有布局。例如,如果您有LinearLayout,则可以像这样添加圆圈:

LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.my_linear_layout);
mLinearLayout.addView(obj);

以下是addView的文档。对于RelativeLayout,它看起来会有所不同。我引用this question

通过编辑,我发现你有一个RelativeLayout和一个LinearLayout。因此,以编程方式使用的路径将取决于您希望将对象放置在视图层次结构中的哪个位置,这完全取决于您。