ViewGroup,Spinner——开源项目Standup Timer学习总结(五)
来源:互联网 发布:卧龙地产收购君海网络 编辑:程序博客网 时间:2024/06/05 04:03
通过GroupView来实现length of metting 不同选择方式。
在设置中勾选variable metting length 时,会议时长可以设定为多变的长度(即任意长度),当不勾选时,只提供默认的选择,包括5、10、15、20 min。前者是用一个EditText来显示,后者是用Spinner。
那具体是怎实现这种变化的呢。下面详细道来。
一、onResume()中初始化显示界面
protected void onResume() { super.onResume(); initializeGUIElements(); //初始化界面。 }
二、定义了一个初始化界面函数initializeGUIElements(),每次刷新界面组件的时候,都会调用这个初始化函数。
private void initializeGUIElements() { //初始化界面 loadState(); initializeNumberOfParticipants(); initializeMeetingLength(); initializeTeamNamesSpinner(); initializeStartButton(); }
这个初始化函数,不只是初始化了可见界面组件,还对必要的数据进行了刷新,在loadState()里面实现,这里我们不去详细讲解这个,知道它的作用就行了。
我们所要关注的是initializeMettingLength(),在这个函数里根据设置里的variable metting length的选择情况,判断使用哪种显示方式来提供时长选择。
三、定义initailizeMettingLength():
removeAllViews():移除View容器中的所有view
addView(View v):向View容器中添加View
private void initializeMeetingLength() { //初始化时长 ViewGroup meetingLengthContainer = (ViewGroup) findViewById(R.id.meeting_length_container); //生成一个View容器 meetingLengthContainer.removeAllViews(); //移除View容器中的所有view View meetingLengthView = null; if (Prefs.allowVariableMeetingLength(this)) { //判断选取那种组件进行显示 meetingLengthView = createMeetingLengthTextBox(); //设置时间长短为任意值,显示的是EditText } else { meetingLengthView = createMeetingLengthSpinner(); //设置时间长度为预设置的值,显示的是Spinner } meetingLengthContainer.addView(meetingLengthView); //向View容器中添加View }
ViewGroup meetingLengthContainer = (ViewGroup) findViewById(R.id.meeting_length_container); //生成一个View容器
在布局文件中获取这个View容器,用于装载显示时长所需要的控件(EditText/Spinner)。布局文件如下,其中我们只需要关注<LinearLayout android:id="@+id/meeting_length_container"……<?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="fill_parent" android:orientation="horizontal" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@string/number_of_participants" android:textSize="17sp" /> <EditText android:id="@+id/num_participants" android:layout_width="60dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="5dp" android:digits="0123456789" android:gravity="center" android:inputType="phone" android:lines="1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:paddingTop="20dp" android:text="@string/length_of_meeting" android:textSize="17sp" /> <LinearLayout android:id="@+id/meeting_length_container" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="100dp" android:layout_marginRight="100dp" android:layout_marginTop="5dp" android:gravity="center" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:paddingTop="20dp" android:text="@string/team" android:textSize="17sp" /> <Spinner android:id="@+id/team_names" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="70dp" android:layout_marginRight="70dp" android:layout_marginTop="5dp" android:prompt="@string/team" /> <Button android:id="@+id/start_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="20dp" android:text="@string/start" android:width="80dp" /> </LinearLayout></LinearLayout>我们还需要了解是如何获取variable metting length的设置状态的。Prefs.allowVariableMeetingLength(this)实现了这个功能。
四、定义Prefs以及其中的修改和获取设置状态的方法。Prefs继承了PreferenceActivity,是用于保存和修改各种设置状态的,这种数据的保存具有持久性。SharedPreferences我们之前已经学习过了,也是用于保存持久性的数据。这里学习如何使用PreferenceActivity达到同样的效果。
public class Prefs extends PreferenceActivity { private static final String SOUNDS = "sounds"; private static final boolean SOUNDS_DEFAULT = true; private static final String WARNING_TIME = "warning_time"; private static final int WARNING_TIME_DEFAULT = 15; private static final String UNLIMITED_PARTICIPANTS = "unlimited_participants"; private static final boolean UNLIMITED_PARTICIPANTS_DEFAULT = false; private static final String VARIABLE_MEETING_LENGTH = "variable_meeting_length"; private static final boolean VARIABLE_MEETING_LENGTH_DEFAULT = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); } public static boolean playSounds(Context context) {//获取PlaySounds设置的状态值 return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(SOUNDS, SOUNDS_DEFAULT); } public static void setPlaySounds(Context context, boolean value) {//修改PlaySounds设置。并保存。 PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(SOUNDS, value).commit(); } public static int getWarningTime(Context context) { String value = PreferenceManager.getDefaultSharedPreferences(context).getString(WARNING_TIME, Integer.toString(WARNING_TIME_DEFAULT)); try { return Integer.parseInt(value); } catch (NumberFormatException e) { setWarningTime(context, WARNING_TIME_DEFAULT); return WARNING_TIME_DEFAULT; } } public static void setWarningTime(Context context, int warningTime) { PreferenceManager.getDefaultSharedPreferences(context).edit().putString(WARNING_TIME, Integer.toString(warningTime)).commit(); } public static boolean allowUnlimitedParticipants(Context context) { return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(UNLIMITED_PARTICIPANTS, UNLIMITED_PARTICIPANTS_DEFAULT); } public static void setAllowUnlimitedParticipants(Context context, boolean value) { PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(UNLIMITED_PARTICIPANTS, value).commit(); } public static boolean allowVariableMeetingLength(Context context) { return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(VARIABLE_MEETING_LENGTH, VARIABLE_MEETING_LENGTH_DEFAULT); } public static void setAllowVariableMeetingLength(Context context, boolean value) { PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(VARIABLE_MEETING_LENGTH, value).commit(); }}五、接下来了解这两个方法:
1、 createMeetingLengthTextBox()2、 createMeetingLengthSpinner():通过这个方法可以学习创建和配置Spinner
private View createMeetingLengthTextBox() { //创建时长输入编辑框 meetingLengthEditText = new EditText(this); meetingLengthEditText.setGravity(Gravity.CENTER); meetingLengthEditText.setKeyListener(new DigitsKeyListener()); meetingLengthEditText.setRawInputType(InputType.TYPE_CLASS_PHONE); meetingLengthEditText.setLayoutParams(new LayoutParams(dipsToPixels(60), LayoutParams.WRAP_CONTENT)); meetingLengthEditText.setText(Integer.toString(meetingLength)); meetingLengthEditText.setLines(1); meetingLengthSpinner = null; return meetingLengthEditText; }private View createMeetingLengthSpinner() { //创建时长选择Spinner meetingLengthSpinner = new Spinner(this); meetingLengthSpinner.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));//设置布局参数 meetingLengthSpinner.setPrompt(this.getString(R.string.length_of_meeting)); //设置对话框提示标题 ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(this, R.array.meeting_lengths, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); meetingLengthSpinner.setAdapter(adapter); meetingLengthSpinner.setSelection(getSpinnerPositionFromMeetingLength(meetingLength)); meetingLengthEditText = null; return meetingLengthSpinner; }其中, android.R.layout.simple_spinner_item是系统的默认布局文件。Spinner中每一个选项的布局文件:
<resources> <string-array name="meeting_lengths"> <item>@string/five_min</item> <item>@string/ten_min</item> <item>@string/fifteen_min</item> <item>@string/twenty_min</item> </string-array></resources>
到这里基本清楚了,收笔!
- ViewGroup,Spinner——开源项目Standup Timer学习总结(五)
- Opinion Menu的使用——开源项目Standup Timer学习总结(一)
- Dialog使用详解——开源项目Standup Timer学习总结(三)
- PreferenceActivity、SharedPreferences——开源项目Standup Timer学习总结(四)
- Context Menu的使用+为ListView绑定监听器——开源项目Standup Timer学习总结(二)
- Standup Timer 学习总结之一 —— MVC模式
- Android 自动化测试—robotium(五)Spinner控件
- Android 自动化测试—robotium(五)Spinner控件
- Scrum实践二——Daily Standup Meeting
- Android学习自定义View(五)——自定义ViewGroup及其onMeasure()的理解
- Android线程—Timer类(五)
- 读卡器项目总结(五)— M1S卡应用
- 吊扇项目总结(五)— STM8 GPIO的探讨
- Android项目——Spinner的使用
- Android学习笔记(十五)——spinner
- Android 学习笔记(12)—— Spinner下拉控件
- java网络编程学习(五)开源项目:Mina
- android 自定义View学习总结-继承自ViewGroup(2)
- Java heap space的设置与在myeclipse启动时分配JVM heap大小的方法
- .Net中的内存回收机制
- Ubuntu Linux系统下apt-get命令详解
- JavaScript中为事件句柄绑定监听函数
- 由于句柄值实际上是放入进程句柄表的索引,因此这些句柄 是与进程相关的,并且不能由其他进程成功地使用
- ViewGroup,Spinner——开源项目Standup Timer学习总结(五)
- 如何提高执行力
- 栈的简单应用
- Kruskal算法证明及实现
- 使用变量或者结构体与使用变量指针或结构体指针方法的优缺点是
- 架构之美第十二章-好的架构
- JavaScript的执行顺序及onload的事件的一些问题
- ubuntu 配置ip地址命令
- YII中一步一步的配置SRBAC