values/dimens.xml
1 2 3 4 5 6 |
<resources> <dimen name="fab_margin">16dp</dimen> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> </resources> |
layout/check_layout.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:columnCount="3" android:descendantFocusability="blocksDescendants" android:orientation="horizontal" android:padding="5dp"> <ImageView android:id="@+id/check_imgView" android:layout_marginLeft="20dp" android:layout_marginRight="10dp" android:src="@mipmap/ic_launcher" android:tint="#aaa" /> <TextView android:id="@+id/check_textView" android:layout_columnWeight="1" android:layout_gravity="center_vertical" android:text="Title" android:textColor="#000" android:textSize="18sp" /> <CheckBox android:id="@+id/check_box" android:layout_gravity="center_vertical" android:paddingRight="10dp" /> </GridLayout> |
layout/section_layout.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#cde" android:padding="7dp"> <TextView android:id="@+id/section_textView" android:layout_marginLeft="10dp" android:text="Section" android:textColor="#00b" android:textSize="18sp" /> </GridLayout> |
layout/setting_layout.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:columnCount="4" android:descendantFocusability="blocksDescendants" android:orientation="horizontal" android:padding="5dp"> <ImageView android:id="@+id/setting_imgView" android:layout_marginLeft="20dp" android:layout_marginRight="10dp" android:src="@mipmap/ic_launcher" android:tint="#aaa" /> <TextView android:id="@+id/setting_textView_title" android:layout_columnWeight="1" android:layout_gravity="center_vertical" android:text="Title" android:textColor="#000" android:textSize="18sp" /> <TextView android:id="@+id/setting_textView_value" android:layout_gravity="center_vertical" android:text="Value" android:textColor="#777" android:textSize="16sp" /> <ImageView android:id="@+id/setting_imageView_arrow" android:layout_gravity="center_vertical" android:src="@drawable/ic_arrow" android:tint="#aaa" /> </GridLayout> |
CheckViewHolder.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package com.phaisarn.myapplication; import android.view.View; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; public class CheckViewHolder { ImageView imageView; TextView textTitle; CheckBox checkBox; public CheckViewHolder(View view) { this.imageView = (ImageView) view.findViewById(R.id.check_imgView); this.textTitle = (TextView) view.findViewById(R.id.check_textView); this.checkBox = (CheckBox) view.findViewById(R.id.check_box); } } |
SettingViewHolder.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com.phaisarn.myapplication; import android.view.View; import android.widget.ImageView; import android.widget.TextView; public class SettingViewHolder { ImageView imageView; TextView textTitle; TextView textValue; public SettingViewHolder(View view) { this.imageView = (ImageView) view.findViewById(R.id.setting_imgView); this.textTitle = (TextView) view.findViewById(R.id.setting_textView_title); this.textValue = (TextView) view.findViewById(R.id.setting_textView_value); } } |
SectionViewHolder.java
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.phaisarn.myapplication; import android.view.View; import android.widget.TextView; public class SectionViewHolder { TextView textSection; public SectionViewHolder(View view) { this.textSection = (TextView)view.findViewById(R.id.section_textView); } } |
SettingItem.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package com.phaisarn.myapplication; import android.app.Activity; public class SettingItem { public int imageId; public String title; public String value; public Activity activity; public SettingItem(int imageId, String textTitle, String textValue, Activity target) { this.imageId = imageId; this.title = textTitle; this.value = textValue; this.activity = target; } } |
CheckItem.java
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.phaisarn.myapplication; public class CheckItem { public int imageId; public String title; public boolean isChecked; public CheckItem(int imageId, String title, boolean isChecked) { this.imageId = imageId; this.title = title; this.isChecked = isChecked; } } |
SectionItem.java
1 2 3 4 5 6 7 8 9 10 |
package com.phaisarn.myapplication; public class SectionItem { public String sectionText; public SectionItem(String sectionText) { this.sectionText = sectionText; } } |
CustomAdapter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
package com.phaisarn.myapplication; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import java.util.ArrayList; public class CustomAdapter extends ArrayAdapter { private Context mContext; private ArrayList mItems; private final int SECTION = 0; //ให้เริ่มจาก 0 เสมอ มิฉะนั้นอาจเกิด Error private final int CHECK = 1; private final int SETTING = 2; public CustomAdapter(Context context, ArrayList items) { super(context, 0, items); mContext = context; mItems = items; } @Override public int getViewTypeCount() { return 3; //มีรายการ 3 ชนิด } @Override public int getItemViewType(int position) { if(mItems.get(position) instanceof SectionItem) { return SECTION; } else if(mItems.get(position) instanceof CheckItem) { return CHECK; } else if(mItems.get(position) instanceof SettingItem) { return SETTING; } return -1; } @Override public View getView(final int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); if(type == SECTION) { SectionViewHolder sectionHolder; if(convertView == null) { LayoutInflater inflater = LayoutInflater.from(mContext); convertView = inflater.inflate(R.layout.section_layout, parent, false); sectionHolder = new SectionViewHolder(convertView); convertView.setTag( sectionHolder); } else { sectionHolder = (SectionViewHolder)convertView.getTag(); } SectionItem item = (SectionItem)mItems.get(position); sectionHolder.textSection.setText(item.sectionText); } else if(type == CHECK) { final CheckViewHolder checkHolder; if(convertView == null) { LayoutInflater inflater = LayoutInflater.from(mContext); convertView = inflater.inflate(R.layout.check_layout, parent, false); checkHolder = new CheckViewHolder(convertView); convertView.setTag(checkHolder); } else { checkHolder = (CheckViewHolder)convertView.getTag(); } final CheckItem item = (CheckItem)mItems.get(position); checkHolder.imageView.setImageResource(item.imageId); checkHolder.textTitle.setText(item.title); checkHolder.checkBox.setChecked(item.isChecked); checkHolder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { CheckBox cbx = (CheckBox)view; item.isChecked = cbx.isChecked(); } }); } else if(type == SETTING) { final SettingViewHolder settingHolder; if(convertView == null) { LayoutInflater inflater = LayoutInflater.from(mContext); convertView = inflater.inflate(R.layout.setting_layout, parent, false); settingHolder = new SettingViewHolder(convertView); convertView.setTag(settingHolder); } else { settingHolder = (SettingViewHolder)convertView.getTag(); } final SettingItem item = (SettingItem)mItems.get(position); settingHolder.imageView.setImageResource(item.imageId); settingHolder.textTitle.setText(item.title); settingHolder.textValue.setText(item.value); /* convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(mContext, item.getActivity().getClass()); mContext.startActivity(intent); } }); */ } return convertView; } } |
activity_second.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main2" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".SecondActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Welcome to \nActivity #2" android:textSize="30sp" /> </FrameLayout> |
SecondActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.phaisarn.myapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } } |
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_main" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" app:srcCompat="@android:drawable/ic_dialog_email" /> </android.support.design.widget.CoordinatorLayout> |
content_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/content_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="0dp" android:paddingRight="0dp" android:paddingTop="0dp" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context=".MainActivity" tools:showIn="@layout/activity_main"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true"></ListView> </LinearLayout> |
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
package com.phaisarn.myapplication; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.content.Intent; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import java.util.ArrayList; import java.util.Arrays; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); /* FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); */ ArrayList itemArray = createItem(); CustomAdapter adapter = new CustomAdapter(this, itemArray); //ใช้ this ถ้าที่คลาส CustomAdapter มีการส่ง Intent จาก Activity นี้ออกไป final ListView listView = (ListView) findViewById(R.id.listView); listView.setAdapter(adapter); setOnListViewItemClick(listView, itemArray); } private ArrayList createItem() { ArrayList arrayList = new ArrayList(); SecondActivity secondActivity = new SecondActivity (); arrayList.add(new SectionItem("การสื่อสาร")); arrayList.addAll(Arrays.asList( new SettingItem(R.drawable.ic_bluetooth, "บลูทูธ", "ปิด", secondActivity), new SettingItem(R.drawable.ic_wifi, "ไว-ไฟ", "เปิด", secondActivity), new CheckItem(R.drawable.ic_airplanemode, "โหมดเครื่องบิน", false), new CheckItem(R.drawable.ic_mobiledata, "ข้อมูลมือถือ", true))); arrayList.add(new SectionItem("วันที่และเวลา")); arrayList.addAll(Arrays.asList( new CheckItem(R.drawable.ic_flash, "อัตโนมัติ", false), new SettingItem(R.drawable.ic_date, "ตั้งวันที่", "1 มกราคม 2560", secondActivity), new SettingItem(R.drawable.ic_time, "ตั้งเวลา", "16:38", secondActivity), new SettingItem(R.drawable.ic_alarm, "นาฬิกาปลุก", "04:50", secondActivity), new CheckItem(R.drawable.ic_hourglass, "เวลาแบบ 24 ชั่วโมง", true))); arrayList.add(new SectionItem("อุปกรณ์")); arrayList.addAll(Arrays.asList( new SettingItem(R.drawable.ic_phone, "โทรศัพท์", "", secondActivity), new SettingItem(R.drawable.ic_display, "หน้าจอ", "", secondActivity), new SettingItem(R.drawable.ic_sound, "เสียง", "", secondActivity), new SettingItem(R.drawable.ic_battery, "แบตเตอรี", "", secondActivity))); return arrayList; } private void setOnListViewItemClick(ListView listView, final ArrayList itemArray) { listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Object item = itemArray.get(i); if(item instanceof SettingItem) { SettingItem sItem = (SettingItem) item; Intent intent = new Intent(getBaseContext(), sItem.activity.getClass()); startActivity(intent); } else if(item instanceof CheckItem) { CheckItem cItem = (CheckItem) item; String str = "Item: " + cItem.title + "\n"; str += "Checked: " + (cItem.isChecked ? "true" : "false"); Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show(); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if(id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } |
รูปที่ใช้