自定义scrollview没有出现

时间:2011-12-16 04:17:41

标签: android

我有一个自定义ScrollView,如果它是模拟器中唯一的东西,它可以正常工作。

例如,这很好用:

    public class Timeline2Activity extends Activity {
        private TimelineView tlv;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            tlv = new TimelineView(this);
            setContentView(tlv);
        }
    }

但是,如果我先添加小部件,那么就无法显示。我已经搜索和实验了2天,没有任何作用。

以下是自定义ScrollView的类声明:

public class TimelineView extends ScrollView implements OnTouchListener {

以下是构造函数:

public TimelineView(Context context) {
    super(context);
this.setOnTouchListener(this);
setVisibility(VISIBLE);
}
//the following constructor is needed to inflate the view from XML
public TimelineView(Context context, AttributeSet ats) {
    super(context,ats);
this.setOnTouchListener(this);
setVisibility(VISIBLE);
}

这是main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/zoomall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Zoom All" />
    <Button
        android:id="@+id/zoomout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="-" />
    <Button
        android:id="@+id/zoomin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="+" />
    <Spinner 
        android:id="@+id/category_spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/category_prompt"
    />
    </LinearLayout>

    <com.projects.timeline2.TimelineView
        android:id="@+id/timeline_view"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

以下是主要计划:

public class Timeline2Activity extends Activity {
    private TimelineView tlv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //tlv = new TimelineView(this);
        //setContentView(tlv);
        setContentView(R.layout.main);

        Spinner spinnerCategory = (Spinner) findViewById(R.id.category_spinner);
        ArrayAdapter<CharSequence> adapterCategory = ArrayAdapter.createFromResource(
                this, R.array.categories, android.R.layout.simple_spinner_item);
        adapterCategory.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerCategory.setAdapter(adapterCategory);
        spinnerCategory.setOnItemSelectedListener(new MyOnItemSelectedListener());
        //TimelineView tlv = (TimelineView) findViewById(R.id.timeline_view);
        //ViewGroup container = (ViewGroup) findViewById(R.id.container);
        //container.addView(tlv);
    }
    public class MyOnItemSelectedListener implements OnItemSelectedListener {

        public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
          Toast.makeText(parent.getContext(), "The selection is " +
              parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
        }

        public void onNothingSelected(AdapterView parent) {
          // Do nothing.
        }
    }
}

注释掉的行是我尝试过但却无法正常工作的东西。

此代码正确地将3个按钮和一个微调器放在顶部的水平行中。但是TimelineView无法显示在它们下面。我知道TimelineView正在运行,因为我可以在我放入的LogCat中看到调试输出。

我在我的智慧结束,并希望有人可以解释一下。这似乎是一个共同的基本需求,当然值得谷歌教程。

3 个答案:

答案 0 :(得分:2)

你正在使用LinearLayout而你已经使用android:layout_height="fill_parent“到第一个元素,所以第一个元素将填满整个屏幕高度,第二个元素将没有空间(com.projects.timeline2.TimelineView)这就是为什么你无法看到第二个元素。

使用相对布局。并提及android:layout_alignParentBottom="true"第二个元素,以便它始终保持在屏幕的底部,并通过将android:layout_above放到第一个元素

将第一个元素与第二个元素对齐

您的XML将

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">



    <com.projects.timeline2.TimelineView

        android:id="@+id/timeline_view"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        />


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" 
    android:layout_above="@+id/timeline_view">

    <Button
        android:id="@+id/zoomall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Zoom All" />
    <Button
        android:id="@+id/zoomout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="-" />
    <Button
        android:id="@+id/zoomin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="+" />
    <Spinner 
        android:id="@+id/category_spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="category_prompt"
    />
    </LinearLayout>
</RelativeLayout>

答案 1 :(得分:0)

我认为您应该将TimeLine的布局高度更改为xml中的fill_parent,或者向其中添加一些内容。

答案 2 :(得分:0)

我终于明白了。这是有效的main.xml。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/buttons"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" 
        android:layout_alignParentTop="true"
    >

    <Button
        android:id="@+id/zoomall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Zoom All" />
    <Button
        android:id="@+id/zoomout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="-" />
    <Button
        android:id="@+id/zoomin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="+" />
    <Spinner 
        android:id="@+id/category_spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />
    </LinearLayout>

    <com.projects.timeline2.TimelineView
        android:id="@+id/timeline_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentBottom="true"
        android:layout_below="@id/buttons"
        />
</RelativeLayout>

感谢大家让我朝着正确的方向前进!

相关问题