<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月24日 星期三
2014年12月12日 星期五
[Android] 騰訊(QQ)認領簽名APP
不知道為什麼在騰訊上傳的APP竟然還會遺失,還需要認領...真是無言
首先登入你的QQ帳號+password
按他 -> 立即認領
按他 -> 認領
首先登入你的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"
如此一般這般這般.....
如果是某一個方法裡要放置的方式
例如說明上寫著: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();
}
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
網路上其實已經有很多這類的相關資訊了,但是找了很久,要不就是很複雜,要不就是很簡陋,就好像只有點到而已,所以在這邊做一個很簡單的示範,就獻醜了!!
效果顯示
完整程式下載 : https://drive.google.com/open?id=0B2WSxYpFVHkaS3VsS2dTQTlfNEE&authuser=0
網路上其實已經有很多這類的相關資訊了,但是找了很久,要不就是很複雜,要不就是很簡陋,就好像只有點到而已,所以在這邊做一個很簡單的示範,就獻醜了!!
效果顯示
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;
}
}
2014年11月18日 星期二
[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" >
程式碼
//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;
}
}
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
方法一
<!--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" }));
}
@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
訂閱:
文章 (Atom)