Android 以编程方式使用固定页眉和页脚的ListView

Android 以编程方式使用固定页眉和页脚的ListView,android,listview,header,Android,Listview,Header,因此,我试图以编程的方式制作一个具有固定页眉和页脚的listView,但我已经看过了,我不能只使用listView上的addHeader来修复页眉,所以我尝试与其他linearlayout一起使用linearlayout,这将是我的固定页眉和页脚,在页眉和页脚之间使用listView,但是当我尝试listView只覆盖整个屏幕时,我使用了relativelayout试图强制标题位于listView之上,但我不能。我昨天已经开始使用android studio并制作android程序,所以我正在努

因此,我试图以编程的方式制作一个具有固定页眉和页脚的listView,但我已经看过了,我不能只使用listView上的addHeader来修复页眉,所以我尝试与其他linearlayout一起使用linearlayout,这将是我的固定页眉和页脚,在页眉和页脚之间使用listView,但是当我尝试listView只覆盖整个屏幕时,我使用了relativelayout试图强制标题位于listView之上,但我不能。我昨天已经开始使用android studio并制作android程序,所以我正在努力学习更多。但我在互联网上搜索过,没有发现任何东西对我有帮助,因为这些示例使用了大量xml,我正试图将其作为最后一个资源使用。出于兼容性原因,我使用的是16版本的android

xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_user_event_search"
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="takeme.testers.UserEventSearch">

</RelativeLayout>

java文件:

private static String[] items = { "test 1", "test 2", "test 3", "test 4",
        "test 5", "test 6", "test 7", "test 8", "test 9", "test 10",
        "test 11", "test 12", "test 13", "test 14", "test 15"};

private ListView eventsView;
private LinearLayout mainLayout, viewHeader, viewFooter, listViewHeader;
private RelativeLayout.LayoutParams params1, params2, params3;
private ArrayAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    mainLayout = new LinearLayout(this.getApplicationContext());
    mainLayout.setOrientation(LinearLayout.VERTICAL);
    mainLayout.setBackgroundColor(Color.TRANSPARENT);
    mainLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
    this.setContentView(mainLayout);
    params1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    params2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    params3 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);


    viewHeader = new LinearLayout(this.getApplicationContext());
    viewHeader.setOrientation(LinearLayout.HORIZONTAL);
    viewHeader.setBackgroundColor(Color.BLACK);
    viewHeader.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 100));
    viewHeader.setId(R.id.l0);
    viewHeader.setGravity(Gravity.TOP);



    eventsView = new ListView(this.getApplicationContext());
    eventsView.setBackgroundColor(Color.RED);
    eventsView.setId(R.id.l1);
    eventsView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 300));
    params2.addRule(RelativeLayout.BELOW, viewHeader.getId());


    listViewHeader = new LinearLayout(this.getApplicationContext());
    listViewHeader.setOrientation(LinearLayout.HORIZONTAL);
    listViewHeader.setBackgroundColor(Color.WHITE);
    listViewHeader.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 100));

    eventsView.addHeaderView(listViewHeader, null, false);


    viewFooter = new LinearLayout(this.getApplicationContext());
    viewFooter.setOrientation(LinearLayout.HORIZONTAL);
    viewFooter.setGravity(Gravity.BOTTOM);
    viewFooter.setBackgroundColor(Color.BLUE);
    viewFooter.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.WRAP_CONTENT, 100));
    viewFooter.setId(R.id.l2);
    params3.addRule(RelativeLayout.BELOW, eventsView.getId());

    this.addContentView(viewHeader, params1);
    this.addContentView(eventsView, params2);
    this.addContentView(viewFooter, params3);

    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, items);
    eventsView.setAdapter(adapter);
}
私有静态字符串[]项={“测试1”、“测试2”、“测试3”、“测试4”,
“测试5”、“测试6”、“测试7”、“测试8”、“测试9”、“测试10”,
“测试11”、“测试12”、“测试13”、“测试14”、“测试15”};
私有列表视图事件视图;
private LinearLayout Main布局、viewHeader、viewFooter、listViewHeader;
private RelativeLayout.LayoutParams参数1、参数2、参数3;
专用阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mainLayout=new LinearLayout(this.getApplicationContext());
主布局。设置方向(线性布局。垂直);
主布局。setBackgroundColor(颜色。透明);
mainLayout.setLayoutParams(新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.MATCH_父项));
此.setContentView(主布局);
params1=新的RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_内容,RelativeLayout.LayoutParams.WRAP_内容);
params2=新的RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_内容,RelativeLayout.LayoutParams.WRAP_内容);
params3=新的RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_内容,RelativeLayout.LayoutParams.WRAP_内容);
viewHeader=newlinearLayout(this.getApplicationContext());
viewHeader.setOrientation(LinearLayout.HORIZONTAL);
viewHeader.setBackgroundColor(颜色:黑色);
viewHeader.setLayoutParams(新的RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_内容,100));
viewHeader.setId(R.id.l0);
viewHeader.setGravity(Gravity.TOP);
eventsView=new ListView(this.getApplicationContext());
eventsView.setBackgroundColor(颜色:红色);
eventsView.setId(R.id.l1);
eventsView.setLayoutParams(新的RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_内容,300));
params2.addRule(RelativeLayout.down,viewHeader.getId());
listViewHeader=new LinearLayout(this.getApplicationContext());
listViewHeader.setOrientation(LinearLayout.HORIZONTAL);
listViewHeader.setBackgroundColor(Color.WHITE);
listViewHeader.setLayoutParams(新的AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,100));
eventsView.addHeaderView(listViewHeader,null,false);
viewFooter=newlinearLayout(this.getApplicationContext());
viewFooter.setOrientation(LinearLayout.HORIZONTAL);
viewFooter.setGravity(Gravity.BOTTOM);
viewFooter.setBackgroundColor(Color.BLUE);
viewFooter.setLayoutParams(新的AbsListView.LayoutParams(AbsListView.LayoutParams.WRAP_内容,100));
viewFooter.setId(R.id.l2);
params3.addRule(RelativeLayout.BELOW,eventsView.getId());
this.addContentView(viewHeader,参数1);
this.addContentView(eventsView,params2);
this.addContentView(viewFooter,params3);
适配器=新阵列适配器(此,
android.R.layout.simple_list_item_1,items);
eventsView.setAdapter(适配器);
}
目前的结果是:


固定页眉和页脚,你是说它们总是在屏幕上?如果是这样的话,不要让它们成为页眉和页脚。只需将它们设置为普通视图,并将ListView置于它们之间(最简单的方法是使用相对的yout父项,将列表布局放在页脚上方,将布局放在页眉下方。是的,固定页眉和页脚的意思是始终在屏幕上。这就是我试图做的。但正如我所说,我正试图以编程方式来做,而不仅仅是使用设计器。1)为什么?那就更难了。除非绝对必要,否则没有人会动态创建视图。如果这样做,代码审查或面试就会失败。2)即使忽略了这一点,你仍然可以按照我告诉你的编程方式来做。这是做这件事的标准方法。所有3个视图都在一个相对的布局中,列表上有规则将其放在两者之间(并将页眉和页脚分别钉在父视图的顶部和底部)。@Gabeschen 1)因为我正在努力学习,这是我学习的最佳方式,正如我所说,我刚刚开始学习如何制作android程序,昨天就开始了。2) 我如何以编程方式完成它?因为上面显示的代码是我如何尝试做类似于您所说的事情的。你能举个例子或者说我写的有什么不对吗?无论如何,谢谢你,不要担心面试或者在一个合适的代码上,我会在xml上做应该做的事情。