2014年12月24日 星期三

[Android] 在XML設計點擊效果

            <ToggleButton
                android:id="@+id/week1"
                style="@style/geo_fence_week_btn_2"
                android:text="@string/fence_week_1" />

style_custom.xml
      <style name="geo_fence_week_btn_2">
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_marginRight">2dp</item>
        <item name="android:layout_weight">1</item>
        <item name="android:textColor">@color/geo_fence_week_btn_2_textcolor_selector</item>
        <item name="android:background">@drawable/geo_fence_week_btn_2_bgcolor_selector</item>
    </style>

geo_fence_week_btn_2_bgcolor_selector.xml
    <item android:state_checked="true" android:state_pressed="false">
        <shape android:shape="rectangle">
            <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
            <solid android:color="#fffcce01"/>
        </shape>
    </item>
    <item android:state_checked="false" android:state_pressed="false">
        <shape android:shape="rectangle">
            <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
            <solid android:color="#ff939393"/>
        </shape>
    </item>

還不知道要幹嘛
    <item android:state_checked="true" android:state_pressed="true">
        <shape android:shape="rectangle">
            <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
            <solid android:color="#ffff"/>
        </shape>
    </item>
    <item android:state_checked="false" android:state_pressed="true">
        <shape android:shape="rectangle">
            <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp"/>
            <solid android:color="#ffff"/>
        </shape>
    </item>

2014年12月23日 星期二

2014年12月12日 星期五

[Android] 騰訊(QQ)認領簽名APP

不知道為什麼在騰訊上傳的APP竟然還會遺失,還需要認領...真是無言

首先登入你的QQ帳號+password

按他 -> 立即認領

按他 -> 認領
按他 -> 在校驗的左邊的Editor上打上你的packeName ->按下校驗
按下 -> 下一步
按下 -> 下載
再來就是:blablabla

上面的文字就是要你去你的cmd(命令提示字元)上執行,首先找到你的Java是安裝在哪邊

大部分如果沒有特別去動的話都會是在C:\Program Files\Java>

然後再進去尋找一下你的jarsigner.exe到底是在哪邊,我的話的完整路徑如下C:\Program Files\Java\jdk1.7.0_71\bin

就先到這個路近下再進行以下操作

jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkIn] [alias]

[keystorePath] -> 是你的keystore的位置 加完整的名稱,例如:D:\apkIn\angelcare,keystore
[apkOut] -> 是你app轉成apk的檔案,我的話就暫時都放一起,例如:D:\apkIn\700_CN_2.26.apk
[apkIn] -> 是在騰訊下載下來的未簽名檔案,例如:D:\apkIn\tap_unsign.apk
[alias] -> 是你在app打包的時候會出現的,例如:如下...

再來就可以按下Enter了,再來會要求你輸入keystore的password就算完成了

按下一步...


按下 -> 上傳安裝包
傳完之後就算完成了




[Android] 自己畫折線圖 Canvas

示意圖

如此如此,這般這般

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

public class LineChart4 extends View {
Paint paintX, paintXMore, paintText, paintLineFill, paintLine;
ArrayList<Integer> randomArray = new ArrayList<Integer>();
public LineChart4(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub

for(int i = 0; i < 10; i++){
randomArray.add((int)(Math.random()*500+500));
System.out.println("randomArray...." + randomArray.get(i));
}

setPaintType();
getViewSize();

}


private void setPaintType() {
// TODO Auto-generated method stub
//底線
paintX = new Paint();
paintX.setColor(Color.BLACK);
paintX.setStrokeWidth(4);
//X軸的很多條線
paintXMore = new Paint();
paintXMore.setColor(Color.GRAY);
paintXMore.setStrokeWidth(1);
//字字字字字字
paintText = new Paint();
paintText.setColor(Color.RED);
paintText.setTextSize(70);
//折線圖的塞滿
paintLineFill = new Paint();
paintLineFill.setColor(Color.CYAN);
paintLineFill.setStrokeWidth(4);
paintLineFill.setStyle(Style.FILL);
//折線圖的線
paintLine = new Paint();
paintLine.setColor(Color.RED);
paintLine.setStrokeWidth(10);
paintLine.setStyle(Style.STROKE);
}


private void getViewSize() {
// TODO Auto-generated method stub
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
layoutParams.height = this.getHeight();
layoutParams.width = this.getWidth();
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
Path path = new Path();
//比例
int scaleSpacing = this.getHeight() / Collections.max(randomArray);
//畫X線
canvas.drawLine(0, this.getHeight() - 50f, this.getWidth(), this.getHeight() - 50f, paintX);

//畫X的很多條線
int drawMoreLineX = 10;
int textSpacing = this.getWidth() / drawMoreLineX;
for(int i = 1; i <= drawMoreLineX; i++)
canvas.drawLine(0, this.getHeight() - ((this.getHeight() / drawMoreLineX) * i), this.getWidth(), this.getHeight() - ((this.getHeight() / drawMoreLineX) * i), paintXMore);
for(int i = 1; i <= drawMoreLineX; i++)
canvas.drawText(String.valueOf(i), textSpacing * i , this.getHeight(), paintText);
//畫線
path.moveTo(0, this.getHeight() - 50f);

for(int i = 0; i < randomArray.size(); i++){
int y = i;
path.lineTo((this.getWidth() / randomArray.size()) * ++y, scaleSpacing * randomArray.get(i));
}path.lineTo(this.getWidth(), this.getHeight() - 50f);
canvas.drawPath(path, paintLine);
canvas.drawPath(path, paintLineFill);
}

}


下載地址:https://drive.google.com/open?id=0B2WSxYpFVHkaOWhsSGlITFJvTW8&authuser=0
參考網址:http://www.cnblogs.com/aibuli/p/950c34f2bc0d02cbd290dd6a8339d42a.html

2014年12月10日 星期三

[Android] 自定義 Dialog

彈出畫面:

heart_rate__calendar.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"         
    android:layout_width="fill_parent"                         
    android:layout_height="match_parent"                       
    android:scrollbarStyle="outsideInset" >                       
                                        
    <LinearLayout                                 
        android:layout_width="match_parent"                       
        android:layout_height="match_parent"                      
        android:background="#FFFFFFFF"                       
        android:gravity="center"                            
        android:orientation="vertical" >                         
                                        
        <TextView                                 
            android:id="@+id/calendar_month"                      
            android:layout_width="match_parent"                     
            android:layout_height="0dp"                        
            android:layout_weight="1"                         
            android:gravity="center"                          
            android:text="NOV"                            
            android:textColor="#FF33B5E5"                       
            android:textSize="30sp" />                          
                                       
        <TextView                                 
            android:id="@+id/calendar_day"                       
            android:layout_width="match_parent"                     
            android:layout_height="0dp"                        
            android:layout_weight="4"                         
            android:autoText="true"                          
            android:gravity="center"                          
            android:text="37"                             
            android:textColor="#FF33B5E5"                       
            android:textSize="120sp" />                         
                                        
                                               <CalendarView                                 
            android:id="@+id/calendarChose"                      
            android:layout_width="fill_parent"                      
            android:layout_height="0dp"                        
            android:layout_weight="5"                         
            android:accessibilityLiveRegion="assertive"                  
            android:descendantFocusability="blocksDescendants"              
            android:focusable="true"                         
            android:focusableInTouchMode="true"                    
            android:importantForAccessibility="auto"                   
            android:labelFor="@integer/abc_max_action_buttons"              
            android:layoutMode="opticalBounds"                     
            android:nextFocusForward="@anim/slide_in_right" />              
                                       
        <Button                                 
            android:id="@+id/calendar_done"                      
            android:layout_width="match_parent"                    
            android:layout_height="0dp"                        
            android:layout_weight="1"                        
                                             
            android:background="#FFFFFFFF"                     
            android:text="Done" />                          
    </LinearLayout>                               
</RelativeLayout>                                
                                                                                                    

heart_rate_maina.class

private View dialogViewCalendar, view;                     
protected AlertDialog dialogCalendar;                      
private Button btn1;                             
public class heart_rate_main extends Fragment{                  
@Override                                
public View onCreateView(LayoutInflater inflater, ViewGroup container,       
Bundle savedInstanceState) {                        
                view = inflater.inflate(R.layout.heart_rate_main, container, false);      
                btn1 = (Button)view.findViewById(R.id.btn1);             
                btn.setOnClickListener(btn1_Click);                  
LayoutInflater factory = LayoutInflater.from(getActivity());        
dialogViewCalendar = factory.inflate(R.layout.heart_rate_calendar, null);   
dialogCalendar = new AlertDialog.Builder(getActivity()).create();      
dialogCalendar.setView(dialogViewCalendar);              
                return view                            
}                                    
                                     
private String[] MonthEng = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

private void dialogCalendarView(){
((TextView)dialogViewCalendar.findViewById(R.id.calendar_month)).setText(new SimpleDateFormat("MMM", Locale.US).format(new Date().getTime()));
((TextView)dialogViewCalendar.findViewById(R.id.calendar_day)).setText(new SimpleDateFormat("dd").format(new Date().getTime()));

((CalendarView)dialogViewCalendar.findViewById(R.id.calendarChose)).setOnDateChangeListener(new OnDateChangeListener() {

@Override
public void onSelectedDayChange(CalendarView view, int year, int month,
int dayOfMonth) {
// TODO Auto-generated method stub

((TextView)dialogViewCalendar.findViewById(R.id.calendar_month)).setText(MonthEng[month]);
((TextView)dialogViewCalendar.findViewById(R.id.calendar_day)).setText(String.valueOf(dayOfMonth));
}
});

((Button)dialogViewCalendar.findViewById(R.id.calendar_done)).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Bundle b = new Bundle();
b.putString("year", new SimpleDateFormat("yyyy").format(((CalendarView)dialogViewCalendar.findViewById(R.id.calendarChose)).getDate()));
b.putString("month", ((TextView)dialogViewCalendar.findViewById(R.id.calendar_month)).getText().toString());
b.putString("day", ((TextView)dialogViewCalendar.findViewById(R.id.calendar_day)).getText().toString());
b.putSerializable("heart_rate_detail_list.class", heart_rate_detail_list.class);
changeFragment(new heart_rate_detail_list(), b);
dialogCalendar.dismiss();
}
});
}

private LinearLayout.OnClickListener btn1_Click = new OnClickListener(){        
       @Override
        public void onClick(View v){
                   dialogCalendar.show();
        }
}



參考文獻:http://iamshiao.blogspot.tw/2010/12/androiddialog.html

2014年12月4日 星期四

[Android] 抓現在時間 - 系統時間 - 以毫秒表現 - 抓最小時間 - 毫秒轉日期 - 一行轉制定格式

毫秒方式表現

如果是某一個方法裡要放置的方式
例如說明上寫著:SelectDayRangeDialog(long startTimeMill)
就是要你放置時間的毫秒,就可以以此表示
new Date().getTime()

//抓系統時間                                       
System.currentTimeMillis()                  

如果是要以變數的方式來取的話
String TimeStamp = String.valueOf(new Date().getTime());


抓最小時間1979
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(0);
Date minTime = cal.getTime();


毫秒轉成日期
long Millis = 1432412345L;
Date date = new Date(Millis);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String endsTimeDate = sdf.format(Millis);


取到毫秒時間一行轉制定日期
new SimpleDateFormat("HH:mm dd/MM/yyyy").format(new Date(data.getTimeMill()))

format 格式
"yyyy-MM-dd HH:mm:ss.SSS 'GMT'Z" = "2014-12-18 11:00:24.513 GMT+0800"


如此一般這般這般.....

2014年12月3日 星期三

[Android] SHA-256加密

SHA-256  的加密方式,是andorid裡面自己就有先寫好的一個方法,但是就是要去呼叫來做執行,他是此方法不能反編譯,所以你如果想驗證自己加密的東西是否是對方想要的,就只能找另一個人做編譯來確認。


public String getDataHash(String Gkey,String AppDataJson){
//得到毫秒数
Date curDate = new Date();
TimeStamp = String.valueOf(curDate.getTime());
   
    String dataStructure = Gkey + TimeStamp + AppDataJson;
    
    MessageDigest shaCode = null;
    try {
    shaCode = MessageDigest.getInstance("SHA-256");
shaCode.update(dataStructure.getBytes());
System.out.println("dataStructure="+dataStructure);
    }
    catch(Exception e) {
    e.printStackTrace();
    return "";
    }
    return byte2Hex(shaCode.digest());
}

private static String byte2Hex(byte[] data) {
String hexString = "";
String stmp = "";

for(int i = 0; i < data.length; i++) {
stmp = Integer.toHexString(data[i] & 0XFF);

if(stmp.length() == 1) {
hexString = hexString + "0" + stmp;
}
else {
hexString = hexString + stmp;
}
}
return hexString.toUpperCase();
}

2014年11月25日 星期二

[Android] MPAndroidChart 圖表製作

資料來源 https://github.com/PhilJay/MPAndroidChart

網路上其實已經有很多這類的相關資訊了,但是找了很久,要不就是很複雜,要不就是很簡陋,就好像只有點到而已,所以在這邊做一個很簡單的示範,就獻醜了!!

效果顯示



XML內容

<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"
    tools:context="com.guider.chartmp.MainActivity" >


      <com.github.mikephil.charting.charts.LineChart
          android:id="@+id/chart"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />


</RelativeLayout>


code 內容

public class MainActivity extends Activity {
LineChart chart;
ArrayList <String> xVals = new ArrayList<String>();
ArrayList <String> yVals = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chart = (LineChart) findViewById(R.id.chart);
chart.setDescription("說明文字");
chart.fitScreen();
LineData data = getData(12, 100);
chart.setData(data);

}

    protected String[] mMonths = new String[] {
            "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
    };
private LineData getData(int count, float range) {
// TODO Auto-generated method stub
      ArrayList<String> xVals = new ArrayList<String>();
       for (int i = 0; i < count; i++) {
           xVals.add(mMonths[i % 12]);
       }

       ArrayList<Entry> yVals = new ArrayList<Entry>();

       for (int i = 0; i < count; i++) {
           float val = (float) (Math.random() * range) + 3;
           yVals.add(new Entry(val, i));
       }

       // create a dataset and give it a type
       LineDataSet set1 = new LineDataSet(yVals, "DataSet 1");
       set1.setLineWidth(5);
       set1.setCircleSize(3f);
       set1.setColor(Color.BLUE);
       set1.setCircleColor(Color.BLUE);
       set1.setHighLightColor(Color.BLUE);

       ArrayList<LineDataSet> dataSets = new ArrayList<LineDataSet>();
       dataSets.add(set1); // add the datasets

       // create a data object with the datasets
       LineData data = new LineData(xVals, dataSets);
return data;
}
}

完整程式下載 : https://drive.google.com/open?id=0B2WSxYpFVHkaS3VsS2dTQTlfNEE&authuser=0

2014年11月18日 星期二

[Android] 使用預設的listView

參考網址 : http://givemepass.blogspot.tw/2011/11/listview.html

[Android] 自定義listView 方法二

稍晚整理....

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MyListItem"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingBottom="3dip"
    android:paddingLeft="10dip" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="時間" />
    <View   
       android:layout_width="1.5dip"  
       android:layout_height="fill_parent"  
       android:background="#f9b68b"/>  
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/HR_heart_rate_text" />
    <View   
       android:layout_width="1.5dip"  
       android:layout_height="fill_parent"  
       android:background="#f9b68b"/> 
            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/HR_risk_text" />
    <View   
       android:layout_width="1.5dip"  
       android:layout_height="fill_parent"  
       android:background="#f9b68b"/> 
            <TextView
                android:id="@+id/textView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/HR_relax_text" />
    <View   
       android:layout_width="1.5dip"  
       android:layout_height="fill_parent"  
       android:background="#f9b68b"/> 
            <TextView
                android:id="@+id/textView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/HR_breathe_rate_text" />

</LinearLayout> 




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

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.5" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="時間" />
    <View   
       android:layout_width="1.5dip"  
       android:layout_height="fill_parent"  
       android:background="#f9b68b"/>  
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/HR_heart_rate_text" />
    <View   
       android:layout_width="1.5dip"  
       android:layout_height="fill_parent"  
       android:background="#f9b68b"/> 
            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/HR_risk_text" />
    <View   
       android:layout_width="1.5dip"  
       android:layout_height="fill_parent"  
       android:background="#f9b68b"/> 
            <TextView
                android:id="@+id/textView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/HR_relax_text" />
    <View   
       android:layout_width="1.5dip"  
       android:layout_height="fill_parent"  
       android:background="#f9b68b"/> 
            <TextView
                android:id="@+id/textView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/HR_breathe_rate_text" />

        </LinearLayout>

        <ListView
            android:id="@+id/hr_list_data"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="9.5" >
        </ListView>

    </LinearLayout>



package com.hartrate.angelcare;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

public class heart_rate_detail_data extends Activity {

ListView listView;

private class hr_detail_list extends BaseAdapter {
private LayoutInflater layoutInflater;

String[] data = { "Android", "iPhone", "WindowsMobile", "Blackberry",
"WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" };

// Context context;
// String[] data;
private class ViewHolder {
TextView textView1, textView2;
}

public hr_detail_list(Context context) {
// TODO Auto-generated constructor stub
// this.context = context;
// this.data = data;
layoutInflater = (LayoutInflater) context
.getSystemService(LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
// return 0;
return data.length;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
// return null;
return position;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder viewHolder;
if (convertView == null) {
convertView = 
layoutInflater.inflate(R.layout.hr_detail_data_list, null);
viewHolder = new ViewHolder();
viewHolder.textView1 = (TextView) convertView.findViewById(R.id.textView1);
viewHolder.textView2 = (TextView) convertView.findViewById(R.id.textView2);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.textView1.setText("text1" + data[position]);
viewHolder.textView2.setText("text2" + data[position]);
return convertView;
}

}


@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.heart_rate_full_data);
                findViews();
     }

private void findViews(){
listView = (ListView)findViewById(R.id.hr_list_data);
listView.setAdapter(new hr_detail_list(this));
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView textView1 = (TextView)((LinearLayout)view).getChildAt(1);
Toast.makeText(getApplicationContext(), textView1.getText(), Toast.LENGTH_SHORT).show();
}
});
}



[Android] 自定義listView [方法一] 較簡單

自定義代表著有些東西要自己重新布置,當然也包含著UI,所以XML的布置

方法一

<!--hr_detail_data_list.xml-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MyListItem"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingBottom="3dip"
    android:paddingLeft="10dip" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="時間" />
    <View   
       android:layout_width="1.5dip"  
       android:layout_height="fill_parent"  
       android:background="#f9b68b"/>  
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/HR_heart_rate_text" />
</LinearLayout>  

這是主要listView
<!-- heart_rate_full_data.xml -->
<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical" >

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </ListView>
</LinearLayout>


程式碼 
//hr_detail_list.java
package com.hartrate.angelcare;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class hr_detail_list extends BaseAdapter {
  Context context;
   String[] data;
   private static LayoutInflater inflater = null;
   
   public hr_detail_list(Context context, String[] data) {
       this.context = context;
       this.data = data;
       inflater = (LayoutInflater) context
               .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   }
   
@Override
public int getCount() {
return data.length;
}
@Override
public Object getItem(int position) {
return data[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null)
        convertView = inflater.inflate(R.layout.hr_detail_data_list, null);
        TextView text1 = (TextView) convertView.findViewById(R.id.textView2);
        
        text1.setText(data[position]);
return convertView;
}

}



package com.hartrate.angelcare;
import java.util.List;
import android.app.Activity;
import android.widget.Toast;

public class heart_rate_detail_data extends Activity {

ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.heart_rate_full_data);
// findViews();
listView = (ListView) findViewById(R.id.hr_list_data);
listView.setAdapter(new hr_detail_list(this, new String[] { "data1",
               "data2" }));
}

AdapterView.OnItemClickListener listviewOnItemClkLis = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(),
            "你選擇的是" + list[position], Toast.LENGTH_SHORT).show();
}

};




參考網址:http://stackoverflow.com/questions/15832335/android-custom-row-item-for-listview