编辑ListView文本

时间:2014-02-17 14:59:35

标签: android android-layout listview android-listview

我正在开发一个Android应用程序,目前我有以下代码:

<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:background="@drawable/background_main"
    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=".MainActivity" >

    <TextView
        android:id="@+id/display_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="25dp"
        android:textSize="20pt"
        android:textColor="#FFFFFF"
        android:visibility="invisible"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="22dp" >
    </ListView>
</RelativeLayout>

import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity {
    private TextView tv;
    private MediaPlayer player = null; 
    ListView listV;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView)findViewById(R.id.display_result);
        listV = (ListView)findViewById(R.id.listView1);
        final Intent i = new Intent(this,BActivity.class);


         String[] values = new String[] { "C 2 F", "F 2 C", "Currency"};

         ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, values);

         listV.setAdapter(arrayAdapter);

         listV.setOnItemClickListener(new OnItemClickListener() {
             public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

              int itemPosition     = position;

              if(itemPosition == 0)
              {
                i.putExtra("identify", "c2f");
                startActivityForResult(i, 1);
                if(player != null)
                    player.stop();
              }
              else if(itemPosition == 1)
              {
                  i.putExtra("identify", "f2c");
                  startActivityForResult(i, 1);
                  if(player != null)
                      player.stop();
              }
              else if(itemPosition == 2)
              {
                  i.putExtra("identify", "currency");
                  startActivityForResult(i, 1);
                  if(player != null)
                      player.stop();
              }


             }

        }); 
    }
    protected void onDestroy()
    {
        super.onDestroy();
        player.stop();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

          if (requestCode == 1) {
             if(resultCode == RESULT_OK){      
                 String result=data.getStringExtra("result");
                 tv.setVisibility(View.VISIBLE);
                 tv.setText(result);

                 player = MediaPlayer.create(this, R.raw.sound);
                 player.start();
             }

          }
        }

}

这一切都运行良好,但ListView显示非常小的黑色文本左对齐,我想将其更改为居中并增加大小,也有任何简单的方法将列表视图中的图片和文本包括在内。我搜索了很多但是它们都非常难以理解,请告诉我在代码中我需要做哪些更改才能编辑listView文本。

3 个答案:

答案 0 :(得分:2)

您需要使用TextView的其他布局。自定义以下布局以满足您的需求。您可以增加文本大小来更改文本颜色,并以您希望的方式自定义文本视图。

<强> row.xml。

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="41dp"
        android:text="TextView" />

</RelativeLayout>

然后

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,R.layout.row,R.id.textView1, values);

对齐

enter image description here

答案 1 :(得分:1)

ListView的所有布局都由适配器给出。您正在使用简单的ArrayAdapter和simple_list_item_1(这是一个简单的TextView)。

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, values);

好处:正如你所见,这很容易。
坏事:除了字符串列表外,你做不了多少。

如果你想要包含图像,更多TextView或其他好东西,你必须创建一个自定义适配器,覆盖ArrayAdapter或另一个,作为BaseAdapter。

Here你可以找到Vogella的简单教程。

正如您所看到的,所有工作都是在getView方法中完成的,所有的“创建”都在这里完成。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.label);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
    textView.setText(values[position]);
    // change the icon for Windows and iPhone
    String s = values[position];
    if (s.startsWith("iPhone")) {
        imageView.setImageResource(R.drawable.no);
    } else {
        imageView.setImageResource(R.drawable.ok);
    }

    return rowView;
}

在开始时,您必须“膨胀”(创建)该行。从该行开始,您将“找到”视图并分别在行的位置设置项目。

表现说明:

由于Android会回收行,因此您应该检查该行是否已经创建。因此,如果convertView为null,则在扩充和包装所有代码之前检查。

答案 2 :(得分:0)

以下是带有ImageView和TextView的 row.xml 。这是列表项目的外观。

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_height="@dimen/item_height"
        android:layout_width="match_parent">

        <ImageView
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/item_image"
            android:layout_width="60dp"
            android:layout_height="60dp"/>        
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/item_image"
            android:id="@+id/item_label"/>        
</RelativeLayout>

然后你需要创建自定义适配器,例如ArrayAdapter的{​​{1}}:

String

之后在你的Activity类中执行类似的操作:

public class SampleAdapter extends ArrayAdapter<String> {

    private LayoutInflater layoutInflater;

    public SampleAdapter(Context context, ArrayList<String> data) {
        super(context, R.layout.adapter_deals_list_fragment, data);
        this.layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        String item = getItem(position);
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.row, parent, false);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.imageView.setImageDrawable(new ColorDrawable(Color.parseColor("#ffaa66cc")));
        viewHolder.textView.setText(item);
        return convertView;
    }

    private class ViewHolder {
        ImageView imageView;
        TextView textView;

        public ViewHolder(View view) {
            imageView = (ImageView) view.findViewById(R.id.item_image);
            textView = (TextView) view.findViewById(R.id.item_label);
        }
    }
}

结果,您的ListView项目看起来像填充彩色图像和文本。