Android中使用ListView实现漂亮的表格效果

在这里我们要使用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来画线条分割各个单元格的,另外我们还可以通过定义不同的背景色,通过背景色来达到相似的效果,这个不难,就不写了。

时间: 2014-10-07

android listview优化几种写法详细介绍

这篇文章只是总结下getView里面优化视图的几种写法,就像孔乙己写茴香豆的茴字的几种写法一样,高手勿喷,勿笑,只是拿出来分享,有错误的地方欢迎大家指正,谢谢. listview Aviewthatshowsitemsinaverticallyscrollinglist. 一个显示一个垂直的滚动子项的列表视图在android开发中,使用listview的地方很多,用它来展现数据,成一个垂直的视图.使用listview是一个标准的适配器模式,用数据--,界面--xml以及适配器--adapter,

Android ListView优化之提高android应用效率

ListView是一个经常用到的控件,ListView里面的每个子项Item可以使一个字符串,也可以是一个组合控件.Adapter是listview和数据源间的中间人. 当每条数据进入可见区域时,adapter的getview()会被调用,返回代表具体数据的视图.触摸滚动时,频繁调用.支持成百上千条数据. 下面为显示每条数据的xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

Android ListView介绍及优化方案

xml设计 <?xml version="1.0"?> -<RelativeLayout tools:context=".MainActivity" android:paddingTop="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingLeft=&

Android编程实现Listview点击展开和隐藏的方法

本文实例讲述了Android编程实现Listview点击展开和隐藏的方法.分享给大家供大家参考,具体如下: 代码较多,所以找关键点大家贴出来,相信大家看了之后很容易就明白的, 在listview的activity中 List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>() myAdapter = new MyAdapter(getApplicationContext(

Android中实现水平滑动(横向滑动)ListView示例

水平的ListView-HorizontalListView的使用 Android中ListView默认的是竖直方向的滑动,由于项目的需求,需要ListView是水平滑动的.有很多的方式可以实现,但是比较好的一种方式就是自己封装一个控件,使用方式和ListView的使用方式是一样的.需要完善的地方:获取到的图片大小没有处理.在界面上展示的是图片的原大小.为了更好的展示效果,应该压缩成统一的尺寸. HorizontalListView.java 代码如下: /** * 横向的ListView *

Android中ListView Item布局优化技巧

本文实例讲述了Android中ListView Item布局优化技巧.分享给大家供大家参考,具体如下: 之前一直都不知道ListView有多种布局的优化方法,只能通过隐藏来实现,自己也知道效率肯定是很低的,但是也不知道有什么方法,这些天又查了一些资料,然后知道 其实google早就帮我们想好了优化方案了. 假设你的ListView Item有三种布局样式的可能:就比如很简单的显示一行字,要靠左,居中,靠右. 这时我们就可以在BaseAdapter里面重写两个方法: private static

实例讲解Android app开发中ListView的基本使用及优化

一.直接使用ListView组件创建 1.直接在XML中创建ListView用entries属性附上一个数组资源 其中divider属性是设置分割线可以使用颜色和drawable资源分割 <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider=&

Android编程使用缓存优化ListView的方法

本文实例讲述了Android编程使用缓存优化ListView的方法.分享给大家供大家参考,具体如下: ListView调用Adapter的getView方法获取每一个Item布局,将这些已经获得的Item布局放入缓存,将大大提高获取数据的效率,而且节省更多的流量,将数据进行缓存有两种方法是,一种是将内存缓存一种是sd卡缓存,在此分别进行演示. sd卡缓存: sd卡缓存是将下载的数据保存到sd卡中,当再次要获取数据时,首先要判断sd卡中是否存在,如果存在的话,就直接读取sd卡中的数据,如果不存在就

浅谈Android开发中ListView控件性能的一些优化方法

ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能. 1.在adapter中的getView方法中尽量少使用逻辑 2.尽最大可能避免GC 3.滑动的时候不加载图片 4.将ListView的scrollingCache和animateCache设置为false 5.item的布局层级越少越好 6.使用ViewHolder 下面就具体来看一些 1.在adapter中的getView方

Android开发中include控件用法分析

本文实例讲述了Android开发中include控件用法.分享给大家供大家参考,具体如下: 我们知道,基于Android系统的应用程序的开发,界面设计是非常重要的,它关系着用户体验的好坏.一个好的界面设计,不是用一个xml布局就可以搞定的.当一个activity中的控件非常多的时候,所有的布局文件都放在一个xml文件中,很容易想象那是多么糟糕的事情!笔者通过自身的经历,用include控件来解决这个问题,下面是一个小例子,仅仅实现的是布局,没有响应代码的设计. user.xml文件内容如下: <

浅谈Android应用内悬浮控件实践方案总结

在工作中遇到一个需求,需要在整个应用的上层悬浮显示控件,目标效果如下图: 首先想到的是申请悬浮窗权限,OK~ 打开搜索引擎,映入眼帘的并不是如何申请,而是"Android 悬浮窗权限各机型各系统适配大全.Android 绕过权限显示悬浮窗...",为什么悬浮窗权限会有这么多坑呢?悬浮窗可以在桌面显示,被恶意软件用来偷偷弹广告怎么办?作为一个系统级别的特殊权限,这是它应有的高傲 - - 正确引导用户打开悬浮窗权限才是标准做法,若这就是定论的话这篇文章也没必要写了,我们绕过悬浮窗权限直接去

Android 自定义弹性ListView控件实例代码(三种方法)

关于在Android中实现ListView的弹性效果,有很多不同的方法,网上一搜,也有很多,下面贴出在项目中经常用到的两种实现ListView弹性效果的方法(基本上拿来就可以用),供大家参考: 弹性ListView 第一种方法: import android.content.Context; import android.content.res.Configuration; import android.util.AttributeSet; import android.util.Display

Android开发中Listview动态加载数据的方法示例

本文实例讲述了Android开发中Listview动态加载数据的方法.分享给大家供大家参考,具体如下: 最近在研究网络数据加载的问题,比如我有几百,甚至上千条数据,这些数据如果一次性全部加载到arraylist,然后再加载到Listview中.我们必然会去单独开线程来做,这样造成的结果就是会出现等待时间很长,用户体验非常不好.我的想法是动态加载数据,第一次加载十条,然后往下面滑动的时候再追加十条,再往下面滑动的时候再去追加,这样大大减少了用户等待的时间,同时给处理数据留下了时间.网上看到了这样一

android开发实现列表控件滚动位置精确保存和恢复的方法(推荐)

Android开发经常要对列表的滚动位置进行保存和恢复,网上也有很多关于此功能的方法文章,但绝大多数都只能保存恢复到某一行,对于滚动到半行的情况不能精确的恢复.也有很多文章介绍了好几种方法,也说某些方法能够精确的控制,但实际上根本不能实现.还有些介绍了很多玄乎且非常复杂的方法,但也没看到能完整实现的代码. 经过一段时间的研究测试,下面的代码可以完美的实现列表滚动位置的精确保存和恢复,而且只是在原来记忆到行位置的基础上增加了2行代码而已. 具体见下面代码和注释: //保存位置: int posit

Android开发之基本控件和四种布局方式详解

Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方式Android和iOS还是区别挺大的,在iOS中有Frame绝对布局和AutoLayout相对布局.而在Android中的布局方式就比较丰富了,今天博客中会介绍四种常用的布局方式.先总结一下控件,然后再搞一搞基本方式,开发环境还是用的Mac下的Android Studio.开始今天的正题, 虽然A

Android线程中设置控件的值提示报错的解决方法

本文实例讲述了Android线程中设置控件的值提示报错的解决方法.分享给大家供大家参考,具体如下: 在Android线程中设置控件的值一般会与Handler联合使用,如下: package com.yarin.android.Examples_04_15; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import andro

Android开发实现Switch控件修改样式功能示例【附源码下载】

本文实例讲述了Android开发实现Switch控件修改样式功能.分享给大家供大家参考,具体如下: Android中自带的Switch控件在很多时候总觉得和整体系统风格不符,很多时候,自定义Switch是一种方法. 但其实不用这么麻烦,安卓自带的Switch通过修改一些属性,也可以达到和自定义Switch差不多的一个效果. 个人感觉,Switch的属性设置和其他控件还是有挺大区别的.因此,写下此文,方便有需要的同学参考. 先上效果图: 以上便是修改后效果 与 原生Switch的效果对比.代码在文

浅谈iOS开发中static变量的三大作用

(1)先来介绍它的第一条也是最重要的一条:隐藏 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话,我举例来说明.我们要同时编译两个源文件,一个是a.c,另一个是main.c. 下面是a.c的内容 char a = 'A'; // global variable void msg() { printf("Hello\n"); } 下面是main.c的内容 int main(void) { extern char a; // extern v