亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android中使用ListView實現漂亮的表格效果

2020-04-11 11:43:32
字體:
來源:轉載
供稿:網友

在這里我們要使用Android ListView來實現顯示股票行情,效果圖如下,紅色表示股票價格上漲,綠色表示股票價格下跌。

第一步、定義color.xml如下:

復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="color_dark_grey">#808080</color>
    <color name="color_black">#000000</color>
    <color name="color_green">#00FF00</color>
    <color name="color_red">#FF0000</color>
    <color name="color_white">#FFFFFF</color>
</resources>

第二步、定義style.xml文件如下:
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Define the list items style begin -->
    <style name="list_item_seperator_layout">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">1dip</item>
        <item name="android:background">@color/color_dark_grey</item>
    </style>
    <style name="list_item_cell_seperator_layout">
        <item name="android:layout_width">1dip</item>
        <item name="android:layout_height">fill_parent</item>
        <item name="android:background">@color/color_dark_grey</item>
    </style>
    <!-- Define the list items style end -->
</resources>

第三步、定義ListHeader的layout文件,stock_list_header.xml如下:
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:stretchColumns="3">
        <TableRow
            android:id="@+id/stock_list_header_row">
            <View
                style="@style/list_item_cell_seperator_layout"
                />
            <TextView
                android:id="@+id/stock_list_header_code"
                android:text="@string/stock_code"
                android:layout_width="60dip"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="2dip"
                />
            <View
                style="@style/list_item_cell_seperator_layout"
                />
            <TextView
                android:id="@+id/stock_list_header_symbol"
                android:text="@string/stock_symbol"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="2dip"
                />
            <View
                style="@style/list_item_cell_seperator_layout"
                />
            <TextView
                android:id="@+id/stock_list_header_last_price"
                android:text="@string/stock_last_price"
                android:layout_width="60dip"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="2dip"
                />
            <View
                style="@style/list_item_cell_seperator_layout"
                />
            <TextView
                android:id="@+id/stock_list_header_price_change"
                android:text="@string/stock_price_change"
                android:layout_width="50dip"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="2dip"
                />
            <View
                style="@style/list_item_cell_seperator_layout"
                />
            <TextView
                android:id="@+id/stock_list_header_price_change_percentage"
                android:text="@string/stock_price_change_percent"
                android:layout_width="50dip"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="2dip"
                />
            <View
                style="@style/list_item_cell_seperator_layout"
                />
        </TableRow>
    </TableLayout>
</LinearLayout>

<View style="@style/list_item_cell_seperator_layout"/>是用來在每個單元格之間顯示出一條垂直的分割線,使單元格之間相互分割開來。

第四步、定義ListItem的布局文件,stock_list_item.xml如下:

復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TableLayout
        android:id="@+id/stock_list_item_table_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:stretchColumns="3">
        <TableRow
            android:id="@+id/stock_list_row">
            <View
                style="@style/list_item_cell_seperator_layout"
                />
            <TextView
                android:id="@+id/stock_code"
                android:layout_width="60dip"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="2dip" />
            <View
                style="@style/list_item_cell_seperator_layout"
                />
            <TextView
                android:id="@+id/stock_symbol"
                android:layout_width="1dip"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="2dip"
                />
            <View
                style="@style/list_item_cell_seperator_layout"
                />
            <TextView android:id="@+id/stock_last_price"
                android:layout_width="60dip"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="2dip"
                />
            <View
                style="@style/list_item_cell_seperator_layout"
                />
            <TextView
                android:id="@+id/stock_change_price"
                android:layout_width="50dip"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="2dip"
                />
            <View
                style="@style/list_item_cell_seperator_layout"
                />
            <TextView
                android:id="@+id/stock_change_percentage"
                android:layout_width="50dip"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:padding="2dip"
                />
            <View
                style="@style/list_item_cell_seperator_layout"
                />
        </TableRow>
    </TableLayout>
</LinearLayout>

第五步、定義stock list activity的layout文件stock_list.xml如下:
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <View
        style="@style/list_item_seperator_layout"
        />
    <include
        layout="@layout/stock_list_header"
        />
    <View
        style="@style/list_item_seperator_layout"
        />
    <ListView
        android:id="@+id/stock_list_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scrollingCache="true"
        android:cacheColorHint="#00000000"
        android:fastScrollEnabled="true"
        android:focusable="true"
        android:divider="@color/color_dark_grey"
        android:dividerHeight="1dip"
        />
</LinearLayout>

<View style="@style/list_item_seperator_layout"/>是為了在Header的上下方顯示一條線來分割header和list.可能有人會問,為什么這里不直接用ListView控件的header呢?

這是因為我們為了使ListView在滾動過程中header始終固定在List的最上方,不會隨著ListView的滾動而消失。

到此為止,layout布局文件基本上定義完了,下面就是如何在代碼中實現了。

StockListActivity.java

復制代碼 代碼如下:

package com.android.msoft.mfinance.ui;

import com.android.msoft.mfinance.R;
import com.android.msoft.mfinance.provider.Stock;
import com.android.msoft.mfinance.provider.StockMarket.StockMarketColumns;
import com.android.msoft.mfinance.ui.MFinancePreferenceActivity.BGColor;
import com.android.msoft.mfinance.ui.MFinancePreferenceActivity.TextSize;
import com.android.msoft.mfinance.ui.MFinancePreferenceActivity.UpDownColor;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.WindowManager;
import android.widget.ListView;
import android.widget.TableRow;
import android.widget.TextView;

public class StockListActivity extends Activity {

 private static final String TAG = "com.android.msoft.mfinance.ui.StockListActivity";
 private SharedPreferences mPreference;
 private TextView mCodeTextView;
 private TextView mSymbolTextView;
 private TextView mLastPriceTextView;
 private TextView mPriceChangeTextView;
 private TextView mPriceChangePercentageTextView;
 private ListView mStockListView;
 private TableRow mStockListHeader;
 private float mTextSize;

 private int mBgColor;
 private int mDownTextColor;
 private int mUpTextColor;
 private Cursor mStockListCursor;

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

  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
  setContentView(R.layout.stock_list);

  mPreference = PreferenceManager.getDefaultSharedPreferences(this);

  refreshDisplayPreference();

  mStockListHeader = (TableRow) findViewById(R.id.stock_list_header_row);
  mCodeTextView = (TextView) findViewById(R.id.stock_list_header_code);
  mSymbolTextView = (TextView) findViewById(R.id.stock_list_header_symbol);
  mLastPriceTextView = (TextView) findViewById(R.id.stock_list_header_last_price);
  mPriceChangeTextView = (TextView) findViewById(R.id.stock_list_header_price_change);
  mPriceChangePercentageTextView = (TextView) findViewById(R.id.stock_list_header_price_change_percentage);

  mStockListView = (ListView) findViewById(R.id.stock_list_view);

  refreshStockListHeader();

  mStockListCursor = getContentResolver().query(
    Stock.CONTENT_URI_STOCK_WITH_MARKET, null, null, null,
    StockMarketColumns.CHANGE_PRICE_PERCENT + " DESC");

  StockListAdapter listViewAdpater = new StockListAdapter(this,
    mStockListCursor);
  mStockListView.setAdapter(listViewAdpater);
 }

 @Override
 protected void onDestroy() {
  if (!mStockListCursor.isClosed()) {
   mStockListCursor.close();
  }

  super.onDestroy();
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {

  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.stock_list_option_menu, menu);
  return super.onCreateOptionsMenu(menu);
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.stock_list_option_menu_settings:
   Intent intent = new Intent(this, MFinancePreferenceActivity.class);
   startActivity(intent);
   break;
  }

  return super.onOptionsItemSelected(item);
 }

 private void refreshDisplayPreference() {

  UpDownColor upAndDownColor = MFinancePreferenceActivity.UpDownColor
    .valueOf(mPreference.getString("up_down_color", "RED_GREEN"));

  if (0 == upAndDownColor.value) { // UP: RED DOWN: GREEN
   mUpTextColor = getResources().getColor(R.color.color_red);
   mDownTextColor = getResources().getColor(R.color.color_green);
  } else { // DOWN: RED UP: GREEN
   mUpTextColor = getResources().getColor(R.color.color_green);
   mDownTextColor = getResources().getColor(R.color.color_red);
  }

  TextSize textSize = MFinancePreferenceActivity.TextSize
    .valueOf(mPreference.getString("text_size", "NORMAL"));
  mTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
    textSize.value, getResources().getDisplayMetrics());

  int colorResId = R.color.color_black;
  BGColor bgColor = MFinancePreferenceActivity.BGColor
    .valueOf(mPreference.getString("bg_color", "BLACK"));

  switch (bgColor.value) {
  case 0:
   colorResId = R.color.color_black;
   break;

  case 1:
   colorResId = R.color.color_white;
   break;

  default:
   Log.e(TAG, "invalid bg color");
  }

  mBgColor = getResources().getColor(colorResId);
 }

 public float getTextSize() {
  return mTextSize;
 }

 public int getBgColor() {
  return mBgColor;
 }

 public int getUpTextColor() {
  return mUpTextColor;
 }

 public int getDownTextColor() {
  return mDownTextColor;
 }

 private void refreshStockListHeader() {

  mCodeTextView.setTextSize(mTextSize);
  mSymbolTextView.setTextSize(mTextSize);
  mLastPriceTextView.setTextSize(mTextSize);
  mPriceChangeTextView.setTextSize(mTextSize);
  mPriceChangePercentageTextView.setTextSize(mTextSize);

  mStockListHeader.setBackgroundColor(mBgColor);
  mStockListView.setBackgroundColor(mBgColor);
 }
}

StockListAdapter.java

復制代碼 代碼如下:

package com.android.msoft.mfinance.ui;

import com.android.msoft.mfinance.provider.Stock.StockColumns;
import com.android.msoft.mfinance.provider.StockMarket.StockMarketColumns;
import android.content.Context;
import android.database.Cursor;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public class StockListAdapter extends BaseAdapter {

 private static final String TAG = "com.android.msoft.mfinance.ui.StockListAdapter";
 private Cursor mStockListCursor;
 private Context mContext;

 private final int sCodeIndex;
 private final int sSymbolIndex;
 private final int sBoardIndex;
 private final int sLastPriceIndex;
 private final int sChangePriceIndex;
 private final int sChangePricePercentIndex;

 public StockListAdapter(Context context, Cursor cursor) {
  mStockListCursor = cursor;
  mContext = context;

  sCodeIndex = mStockListCursor.getColumnIndex(StockColumns.CODE);
  sSymbolIndex = mStockListCursor.getColumnIndex(StockColumns.SYMBOL);
  sBoardIndex = mStockListCursor.getColumnIndex(StockColumns.BOARD);
  sLastPriceIndex = mStockListCursor
    .getColumnIndex(StockMarketColumns.LAST_PRICE);
  sChangePriceIndex = mStockListCursor
    .getColumnIndex(StockMarketColumns.CHANGE_PRICE);
  sChangePricePercentIndex = mStockListCursor
    .getColumnIndex(StockMarketColumns.CHANGE_PRICE_PERCENT);
 }

 @Override
 public int getCount() {
  Log.d(TAG, "Stock list count:" + mStockListCursor.getCount());
  return mStockListCursor.getCount();
 }

 @Override
 public Object getItem(int position) {
  return null;
 }

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

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  StockListItem listItem;

  mStockListCursor.moveToPosition(position);
  if (null == convertView) {
   String code = mStockListCursor.getString(sCodeIndex);
   String symbol = mStockListCursor.getString(sSymbolIndex);
   String board = mStockListCursor.getString(sBoardIndex);
   float lastPrice = mStockListCursor.getFloat(sLastPriceIndex);
   float changePrice = mStockListCursor.getFloat(sChangePriceIndex);
   float changePercent = mStockListCursor
     .getFloat(sChangePricePercentIndex);

   listItem = new StockListItem(mContext, code, symbol, board,
     lastPrice, changePrice, changePercent);
  } else {
   listItem = (StockListItem) convertView;
  }

  return listItem;
 }

}

StockListItem.java

復制代碼 代碼如下:

package com.android.msoft.mfinance.ui;

import com.android.msoft.mfinance.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.TextView;

public class StockListItem extends LinearLayout {

 public StockListItem(Context context, String code, String symbol,
   String board, float lastPrice, float changePrice,
   float changePercent) {
  super(context);

  StockListActivity stockListActivity = (StockListActivity) context;
  float textSize = stockListActivity.getTextSize();

  LayoutInflater factory = LayoutInflater.from(context);
  factory.inflate(R.layout.stock_list_item, this);

  TextView codeTextView = (TextView) findViewById(R.id.stock_code);
  codeTextView.setTextSize(textSize);
  codeTextView.setText(code);

  TextView symbolTextView = (TextView) findViewById(R.id.stock_symbol);
  symbolTextView.setTextSize(textSize);
  symbolTextView.setText(symbol);

  TextView lastPriceTextView = (TextView) findViewById(R.id.stock_last_price);
  lastPriceTextView.setTextSize(textSize);
  lastPriceTextView.setText(Float.toString(lastPrice));

  TextView changePriceTextView = (TextView) findViewById(R.id.stock_change_price);
  changePriceTextView.setTextSize(textSize);
  changePriceTextView.setText(Float.toString(changePrice));

  TextView ChangePercentTextView = (TextView) findViewById(R.id.stock_change_percentage);
  ChangePercentTextView.setTextSize(textSize);
  ChangePercentTextView.setText(Float.toString(changePercent));

  if (changePrice > 0) {
   int textColor = stockListActivity.getUpTextColor();

   // codeTextView.setTextColor(textColor);
   // symbolTextView.setTextColor(textColor);
   lastPriceTextView.setTextColor(textColor);
   changePriceTextView.setTextColor(textColor);
   ChangePercentTextView.setTextColor(textColor);
  }
  else if (changePrice < 0)
  {
            int textcolor="stockListActivity.getDownTextColor(); codetextview.settextcolor(textcolor);
   symboltextview.settextcolor(textcolor);
   lastpricetextview.settextcolor(textcolor); changepricetextview.settextcolor(textcolor);
      changepercenttextview.settextcolor(textcolor)
     }
    }
 }

到此就大功告成了,這個例子我們是通過View來畫線條分割各個單元格的,另外我們還可以通過定義不同的背景色,通過背景色來達到相似的效果,這個不難,就不寫了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产日韩精品在线| 日韩精品中文字幕在线观看| 亚洲欧美国产日韩中文字幕| 日韩欧美亚洲范冰冰与中字| 欧美色欧美亚洲高清在线视频| 国产精品一区二区久久久久| www.日韩av.com| 国内精品久久久久久影视8| 亚洲天堂第一页| 欧美情侣性视频| 日韩av电影在线免费播放| 欧美第一淫aaasss性| 欧美黑人又粗大| 久久久久久亚洲精品不卡| 日本精品视频在线观看| 精品一区二区三区三区| 精品美女久久久久久免费| 亚洲国产中文字幕在线观看| 亚洲男人av在线| 欧美激情一区二区三级高清视频| 国产盗摄xxxx视频xxx69| 欧美日韩国产成人高清视频| 欧美裸体xxxx极品少妇| 亚洲高清免费观看高清完整版| 欧美日韩国产精品一区| 亚洲精品天天看| 日韩精品高清在线观看| 在线电影欧美日韩一区二区私密| 国产欧美日韩免费| 国产在线视频不卡| 欧美激情精品久久久久久大尺度| 91网在线免费观看| 亚洲自拍小视频| 日韩视频中文字幕| 亚洲美女av网站| 亚洲日本欧美日韩高观看| 成人精品久久av网站| 日韩欧美成人精品| 国产精品久久久久久久app| 精品视频久久久久久久| 国产精品一区二区性色av| 成人激情视频小说免费下载| 亚洲午夜av久久乱码| 中日韩美女免费视频网址在线观看| 成人在线激情视频| 欧美视频第一页| 国产亚洲精品91在线| 亚洲精品按摩视频| 色777狠狠综合秋免鲁丝| 91av在线播放| 91在线直播亚洲| 精品福利在线视频| 精品无人国产偷自产在线| 亚洲电影天堂av| 91极品女神在线| 亚洲综合大片69999| 欧美电影免费在线观看| 欧美大片欧美激情性色a∨久久| 亚洲精品一区在线观看香蕉| 欧美丰满老妇厨房牲生活| 国产在线视频2019最新视频| 久热爱精品视频线路一| 亚洲社区在线观看| 91国产美女视频| 欧美与黑人午夜性猛交久久久| 亚洲男子天堂网| 午夜免费日韩视频| 欧美丰满老妇厨房牲生活| 欧美激情视频一区| 狠狠躁夜夜躁人人爽天天天天97| 日韩精品丝袜在线| 亚洲一区二区三区四区在线播放| 精品国产网站地址| 91视频国产精品| 欧美有码在线观看视频| 欧美日韩精品在线观看| 日韩欧美中文第一页| 欧洲成人免费aa| 国产成人一区二区在线| 777精品视频| 国产精品久久久久免费a∨| 亚洲天堂成人在线| 日韩网站免费观看| 亚洲一区中文字幕| 欧美精品免费在线| 久久久久久久久久久久av| 国内久久久精品| 国产精品美女久久久免费| 国产精品视频白浆免费视频| 91精品视频观看| 九九精品视频在线观看| 国产综合久久久久久| 欧美有码在线视频| 国外色69视频在线观看| 国产成人拍精品视频午夜网站| 亚洲人成在线观| 成人精品在线观看| 伊人男人综合视频网| 欧美精品久久久久久久免费观看| 色午夜这里只有精品| 亚洲一区999| 国产精品福利在线观看| 欧美成人免费在线观看| 色哟哟入口国产精品| 91精品国产色综合久久不卡98口| 北条麻妃一区二区在线观看| 欧美激情精品久久久久久| 日韩中文字幕视频| 中文字幕亚洲欧美| 亚洲自拍偷拍网址| 国产99视频精品免视看7| 亚洲自拍另类欧美丝袜| 午夜精品在线观看| 久久91亚洲人成电影网站| 国产精品一区二区三区久久久| 欧美性xxxx极品hd欧美风情| 中文字幕久久久| 色999日韩欧美国产| 国产精品欧美久久久| 国产在线a不卡| 亚洲第一区在线| 精品自拍视频在线观看| 亚洲美女中文字幕| 国产精品美女在线| 97在线日本国产| 亚洲天堂男人天堂女人天堂| 日本亚洲精品在线观看| 亚洲视频在线看| 国产亚洲精品日韩| 永久免费看mv网站入口亚洲| 浅井舞香一区二区| 欧美日韩人人澡狠狠躁视频| 麻豆成人在线看| 国产精品一区二区三区毛片淫片| 亚洲欧美国产精品久久久久久久| 欧美亚洲在线播放| 久久6免费高清热精品| 亚洲国产成人爱av在线播放| 亚洲一区二区久久久| 久久久久国色av免费观看性色| 日韩动漫免费观看电视剧高清| 久久久久久国产免费| 欧美午夜www高清视频| 欧美一级bbbbb性bbbb喷潮片| 91超碰caoporn97人人| 亚洲第五色综合网| 国产精品电影网站| 3344国产精品免费看| 欧美日韩一区二区免费在线观看| 丝袜情趣国产精品| 在线播放国产一区中文字幕剧情欧美| 国产精品第一第二| 在线观看国产精品日韩av| 亚洲色图五月天| 久色乳综合思思在线视频| 亚洲欧美国产高清va在线播| 国产日韩中文在线| 欧美极品少妇与黑人| 欧美成人午夜激情在线| 欧美福利在线观看| 91在线观看免费高清完整版在线观看| 亚洲国产精品成人va在线观看| 国产精品网址在线| 欧美视频在线观看免费|