以编程方式设置多行

时间:2015-05-26 15:38:38

标签: android

----新密码:---- 这个新代码如何使用较小的字体添加额外的行?预期的输出应为:

汉堡包($ 2)

沙拉好牛肉

比萨(3美元)

有很多奶酪

Chicken Nuggets($ 4)

最好的酱汁

@Override
public void onCreate(Bundle savedInstanceState)
{
    final ListView listview = (ListView) findViewById(R.id.listview);
        String[] values = new String[] { "Food (€4)", "Food also (€3)", "Food again (€2,50)" };

        final ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < values.length; ++i) {
            list.add(values[i]);
        }
        final StableArrayAdapter adapter = new StableArrayAdapter(this, android.R.layout.simple_list_item_1, list);
        listview.setAdapter(adapter);
}

private class StableArrayAdapter extends ArrayAdapter<String> {

    HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();

    public StableArrayAdapter(Context context, int textViewResourceId,
                              List<String> objects) {
        super(context, textViewResourceId, objects);
        for (int i = 0; i < objects.size(); ++i) {
            mIdMap.put(objects.get(i), i);
        }
    }
}

----旧代码:----

我想要一个菜单​​列表&#39;以编程方式..像这样输出:

汉堡包 好吃的沙拉牛肉

披萨 有很多奶酪

鸡块 用最好的酱汁

此时所有句子都是单独编程的:

TextView mContent = new TextView(this);
mContent.setText("Hamburger");
mContent.setTextColor(getResources().getColor(android.R.color.black));
mContent.setPadding(32, 8, 32, 0);
mContent.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

((LinearLayout) linearLayout).addView(mContent);

TextView mContent2 = new TextView(this);
mContent2.setText("TextView mContent = new TextView(this);
        //mContent.setText("Broodje hamburger (€6)\nBroodje hotdog (€4,50)\nPizza (€7)\nSpaghetti (€5)");
        mContent.setText("Broodje hamburger (€6)");
        mContent.setTextColor(getResources().getColor(android.R.color.black));
        mContent.setPadding(32, 8, 32, 0);
        mContent.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        ((LinearLayout) linearLayout).addView(mContent);

        TextView mContent2 = new TextView(this);
        mContent2.setText("Met echt rundbeef, sla, tomaten en een lekker sausje");
        mContent2.setTypeface(null, Typeface.ITALIC);
        mContent2.setTextColor(getResources().getColor(android.R.color.black));
        mContent2.setPadding(32, 0, 32, 16);
        mContent2.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        ((LinearLayout) linearLayout).addView(mContent2);");
mContent2.setTypeface(null, Typeface.ITALIC);
mContent2.setTextColor(getResources().getColor(android.R.color.black));
mContent2.setPadding(32, 0, 32, 16);
mContent2.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

((LinearLayout) linearLayout).addView(mContent2);

有没有更简单的方法来解决这个问题?

2 个答案:

答案 0 :(得分:0)

使用ListViewAdapter

在文档中,它在此解释:http://developer.android.com/guide/topics/ui/layout/listview.html

这是一个很好的Lars Vogel教程:http://www.vogella.com/tutorials/AndroidListView/article.html

ListViewAdapter一起使用,即可管理列表中的每个项目。

答案 1 :(得分:0)

您可以使用ListView。它用于以您现在需要的方式显示事物列表。

请参阅this教程。

要自定义布局,您必须创建一个定义单个项目视图的自定义适配器。

StableArrayAdapter.java

// define your custom adapter
    private class StableArrayAdapter extends ArrayAdapter<String> {

        ArrayList<String> items1;
        ArrayList<String> description1;

        ViewHolder viewHolder;

        public StableArrayAdapter(Context context, int textViewResourceId, ArrayList<String> items, ArrayList<String> description) {

            // let android do the initializing :)
            super(context, textViewResourceId, items);
            this.items1=items;
            this.description1 = description;
        }

        @Override
        public int getItemViewType(int position) {
            return (position == this.getCount() - 1) ? 1 : 0;
        }

        private class ViewHolder {
            TextView item;
            TextView desc;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.single, parent, false);
                viewHolder = new ViewHolder();
                viewHolder.item = (TextView) convertView.findViewById(R.id.txt_item);
                viewHolder.desc = (TextView) convertView.findViewById(R.id.txt_desc);
                convertView.setTag(viewHolder);
            } else{
                viewHolder = (ViewHolder) convertView.getTag();
            }
            viewHolder.item.setText(items1.get(position).toString());
            viewHolder.desc.setText(description1.get(position).toString());

            return convertView;
        }

        @Override
        public long getItemId(int arg0) {
            return arg0;
        }

    } 

single.xml

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

    <TextView
        android:id="@+id/txt_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/txt_desc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>