Android界面 - 需要有关使用哪些小部件的建议

时间:2011-05-04 23:47:49

标签: android

我需要创建看起来像“订单”的界面。因此,将有标题数据,然后将有详细信息。我把它视为所有可滚动的屏幕。但我不确定绑定细节的最佳方法是什么。

我可以看到我的能力:

  1. 创建ListView并将标题放在第一行 - IMO UGLY代码。

  2. 创建ListActivity,将标题放在顶部,ListView放在下面 - 由于标题不会滚动,所以没有好处。

  3. 我不确定如何做,但想法是创建主要布局并将空的LinearLayout放在细节应该在哪里。然后创建另一个布局以获取详细信息(就像我对ListView一样)。但我会加载细节并手动给这些孩子充气,然后将它们注入我的LinearLayout。

  4. 那会有用吗?你还会怎么做呢?

    谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用addHeader方法向ListView添加标题,提供可以从其他XML扩展的自定义视图:ListView addHeader method

答案 1 :(得分:0)

最简单的解决方案是在TextView内添加ListViewRelativeLayout。您实际上可以将Textivew替换为您需要的任何View(包括ViewGorup)。

在本教程中了解如何实现它:http://developer.android.com/resources/tutorials/views/hello-relativelayout.html

并查看Romain Guy的帖子,了解LinearLayoutRelativeLayout之间的比较(以及一般的好建议):

http://android-developers.blogspot.com/2009/02/android-layout-tricks-1.html

http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html

http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-with.html


更新

这是一种(非常简化的)创建可扩展LinearLayout的方法。当然,您将添加一些更有趣的内容而不是按钮......

  • 档案MyCustomControl.java

package com.aleadam.test;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MyCustomControl extends LinearLayout {
    Context context;
    Button upper, lower;
    TextView tv;

    public MyCustomControl(Context context) {
        super(context);
        this.context = context;
        expandLayout();
    }

    public MyCustomControl(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        expandLayout();
    }

    private void expandLayout() {
        setOrientation (VERTICAL);
        LayoutParams lp0 = new LayoutParams(
                 LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        LayoutParams lp1 = new LayoutParams(
                 LayoutParams.WRAP_CONTENT, 40);
        LayoutParams lp2 = new LayoutParams(
                 LayoutParams.WRAP_CONTENT, 200);
        TextView tv = new TextView(context);
        tv.setText("The title goes here");

        upper = new Button(context);
        upper.setText("Click to show the other button");

        lower = new Button(context);
        lower.setText("Click to hide this button");
        lower.setVisibility(GONE);

        upper.setOnClickListener(new OnClickListener () {
            public void onClick (View v) {
                lower.setVisibility(VISIBLE);               
            }
        });
        lower.setOnClickListener(new OnClickListener () {
            public void onClick (View v) {
                v.setVisibility(GONE);              
            }
        });      

        this.addView(tv, lp0);
        this.addView(upper, lp1);
        this.addView(lower, lp2);
    }
}
  • 档案Test.java

public class Test extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        inflateLayout();
    }
    public void inflateLayout() {
        ScrollView scr = new ScrollView (this);
        LinearLayout ll = new LinearLayout (this);
        ll.setOrientation(LinearLayout.VERTICAL);
        ll.addView (new MyCustomControl (this));
        ll.addView (new MyCustomControl (this));
        ll.addView (new MyCustomControl (this));
        ll.addView (new MyCustomControl (this));
        scr.addView(ll);
        setContentView (scr);
    }
}

答案 2 :(得分:0)

LinearLayout _> ScrollView _> LinearLayout _/- TextView header
                                            \- ListView w/ adapter