仿小米闹钟日期选择
日期选择页面功能源码:
package com.android.deskclock; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; public class AlarmItemRelativeLayout extends Activity { RelativeLayout alarm_item_everyday_layout; RelativeLayout alarm_item_weekday_layout; Button alarm_item_confirm_button; Button alarm_item_cancle_button; ListView mListView; RepeatAdapter listAdapter; String[] day_list; List<String> listEveryday; HashMap<Integer, Boolean> isSelected; ViewHolder holder; Intent intent; boolean[] boolResult; boolean[] cancleResult; int ALARM_ITEM_FOR_RESULT=1; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.alarm_item_relativelayout); day_list = new String[] { this.getResources().getString(R.string.alarm_item_list_monday), this.getResources().getString(R.string.alarm_item_list_tuesday), this.getResources().getString(R.string.alarm_item_list_wednesday), this.getResources().getString(R.string.alarm_item_list_thursday), this.getResources().getString(R.string.alarm_item_list_friday), this.getResources().getString(R.string.alarm_item_list_saturday), this.getResources().getString(R.string.alarm_item_list_sunday) }; mListView = (ListView) findViewById(R.id.listviewrepeat); listEveryday = new ArrayList<String>(); listAdapter = new RepeatAdapter((ArrayList) listEveryday, this); mListView.setAdapter(listAdapter); alarm_item_everyday_layout = (RelativeLayout) findViewById(R.id.alarm_item_everyday); alarm_item_weekday_layout = (RelativeLayout) findViewById(R.id.alarm_item_weekday); alarm_item_confirm_button=(Button)findViewById(R.id.alarm_item_confirm_button); alarm_item_cancle_button=(Button)findViewById(R.id.alarm_item_cancle_button); intent = getIntent(); boolResult=intent.getBooleanArrayExtra("boolresult"); cancleResult=boolResult; for (int i = 0; i < day_list.length; i++) { listEveryday.add(day_list[i]); } isSelected = new HashMap<Integer, Boolean>(); for (int i = 0; i < listEveryday.size(); i++) { isSelected.put(i, (Boolean)boolResult[i]); } mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { ViewHolder holder = (ViewHolder) arg1.getTag(); holder.checkDay.toggle(); isSelected.put(arg2, holder.checkDay.isChecked()); listAdapter.notifyDataSetChanged(); } }); alarm_item_everyday_layout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { for (int i = 0; i < listEveryday.size(); i++) { isSelected.put(i, true); } listAdapter.notifyDataSetChanged(); } }); alarm_item_weekday_layout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { for (int i = 0; i < listEveryday.size() - 2; i++) { isSelected.put(i, true); } isSelected.put(listEveryday.size() - 2, false); isSelected.put(listEveryday.size() - 1, false); listAdapter.notifyDataSetChanged(); } }); alarm_item_confirm_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean[] getBoolean = new boolean[7]; for (int i = 0; i < getBoolean.length; i++) { getBoolean[i] =isSelected.get(i); } intent.putExtra("boolresult", getBoolean); setResult(ALARM_ITEM_FOR_RESULT, intent); finish(); } }); alarm_item_cancle_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean[] getBoolean = new boolean[7]; intent.putExtra("boolresult", cancleResult); setResult(ALARM_ITEM_FOR_RESULT, intent); finish(); } }); } public class RepeatAdapter extends BaseAdapter { private ArrayList<String> list; private LayoutInflater inflater = null; private Context context; public RepeatAdapter(ArrayList<String> list, Context context) { this.context = context; this.list = list; inflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return listEveryday.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return listEveryday.get(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 if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.alarm_item_relativelayout_listview, null); holder.weekDay = (TextView) convertView.findViewById(R.id.alarm_item_linear_listview_text); holder.checkDay = (CheckBox) convertView.findViewById(R.id.alarm_item_linear_listview_checkbox); LayoutParams lp = new LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, alarm_item_everyday_layout.getHeight()/165*135); convertView.setLayoutParams(lp); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.weekDay.setText(listEveryday.get(position)); holder.checkDay.setChecked(isSelected.get(position)); return convertView; } } class ViewHolder { TextView weekDay; CheckBox checkDay; } }
日期选择页面布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".LinearLayoutActivity" > <RelativeLayout android:id="@+id/alarm_item_header_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FFFFFF" android:orientation="vertical" > <RelativeLayout android:id="@+id/alarm_item_everyday" android:layout_width="match_parent" android:layout_height="@dimen/list_item" android:layout_alignParentTop="true" android:background="@drawable/alarmitemlinear" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="@dimen/bottom_button_margin_left" android:text="@string/alarm_item_everyday_text" android:textColor="@color/black_3" android:textSize="@dimen/prize_normal" android:typeface="serif" /> </RelativeLayout> <RelativeLayout android:id="@+id/alarm_item_weekday" android:layout_width="match_parent" android:layout_height="@dimen/list_item" android:layout_below="@id/alarm_item_everyday" android:background="@drawable/alarmitemlinear" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="@dimen/bottom_button_margin_left" android:text="@string/alarm_item_weekday_text" android:textColor="@color/black_3" android:textSize="@dimen/prize_normal" android:typeface="serif" /> </RelativeLayout> <RelativeLayout android:id="@+id/alarm_item_custom" android:layout_width="match_parent" android:layout_height="@dimen/list_item" android:layout_below="@+id/alarm_item_weekday" android:background="@drawable/alarmitemlinear_up" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="@dimen/bottom_button_margin_left" android:text="@string/alarm_item_custom_text" android:textColor="@color/black_3" android:textSize="@dimen/prize_normal" android:typeface="serif" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="@dimen/bottom_button_margin_left" android:adjustViewBounds="true" android:src="@drawable/alarm_item_relativelayout_custome" /> </RelativeLayout> </RelativeLayout> <ListView android:id="@+id/listviewrepeat" android:layout_width="match_parent" android:layout_height="@dimen/list_item" android:layout_above="@+id/alarm_item_confirm_cancle_layout" android:layout_below="@+id/alarm_item_header_layout" android:background="#FFFFFF" android:divider="#FFFFFF" android:dividerHeight="1px" android:listSelector="#00000000" > </ListView> <LinearLayout android:id="@+id/alarm_item_confirm_cancle_layout" android:layout_width="match_parent" android:layout_height="@dimen/button_layout" android:layout_alignParentBottom="true" android:background="#FFFFFF" android:orientation="horizontal" > <Button android:id="@+id/alarm_item_confirm_button" android:layout_width="wrap_content" android:layout_height="@dimen/button_bottom" android:layout_gravity="center" android:layout_marginLeft="@dimen/bottom_button_margin_left" android:layout_weight="1" android:background="@drawable/alarm_item_relativelayout_button_confirm_style" android:gravity="center" android:text="@string/alarm_item_confirm_text" android:textAllCaps="true" android:textColor="@color/black_3" android:textSize="@dimen/prize_normal" android:typeface="serif" /> <Button android:id="@+id/alarm_item_cancle_button" android:layout_width="wrap_content" android:layout_height="@dimen/button_bottom" android:layout_gravity="center" android:layout_marginRight="@dimen/bottom_button_margin_left" android:layout_weight="1" android:background="@drawable/alarm_item_relativelayout_button_cancle_style" android:gravity="center" android:text="@string/alarm_item_cancle_text" android:textAllCaps="true" android:textColor="@color/black_3" android:textSize="@dimen/prize_normal" android:typeface="serif" /> </LinearLayout> </RelativeLayout>
listview item布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:background="@drawable/alarmitemlinear"> <TextView android:id="@+id/alarm_item_linear_listview_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:gravity="center_vertical" android:layout_centerVertical="true" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:textColor="@color/black_3" android:textSize="@dimen/prize_content" android:layout_marginLeft="@dimen/bottom_button_margin_left" android:typeface="serif" /> <CheckBox android:id="@+id/alarm_item_linear_listview_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:clickable="false" android:focusable="false" android:layout_centerVertical="true" android:layout_marginRight="@dimen/bottom_button_margin_left" style="@style/CustomAlarmItemRelativelayoutCheckboxTheme" android:focusableInTouchMode="false" android:gravity="center_vertical" /> </RelativeLayout>
从fragment跳转到日期选择页面,并且接收返回值
first_linear.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { Intent intent=new Intent(); intent.setClass(getActivity(), AlarmItemRelativeLayout.class); intent.putExtra("boolresult", dateBool); startActivityForResult(intent, 1); } });
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { switch (requestCode) { case REQUEST_CODE_RINGTONE: if(FeatureOption.MTK_DESKCLOCK_NEW_UI){ newSaveRingtonUri(data); }else{ saveRingtoneUri(data); } break; default: LogUtils.w("Unhandled request code in onActivityResult: " + requestCode); } }else if(resultCode == ALARM_ITEM_FOR_RESULT){ dateBool=(boolean[])data.getExtras().get("boolresult"); for(int i=0;i<dateBool.length;i++){ if(i!=dateBool.length-1){ alarm.daysOfWeek.setDaysOfWeek(dateBool[i], NEW_DAY_ORDER[i+1]); }else{ alarm.daysOfWeek.setDaysOfWeek(dateBool[i], NEW_DAY_ORDER[0]); } } final String daysOfWeekStr = alarm.daysOfWeek.toString(AlarmClockFragment.this.getActivity(), false); if (daysOfWeekStr.isEmpty()) { first_linear_alldays.setText(getActivity().getResources().getString(R.string.only_once)); } else { first_linear_alldays.setText(daysOfWeekStr); } } }