当前位置: 首页 > 工具软件 > Standup Timer > 使用案例 >

standupTimer项目中的布局容器

南门鸿雪
2023-12-01
standupTimer是一个开源项目,这个项目涉及的Android知识点并不是太多也不复杂,所以对于初学者来说,读起来并不困难。
关于这个项目有个系列博客,系统地介绍了standupTimer是项目所涉及的知识点,其中包括常用的知识点PowerManager和PowerManager.WakeLock还有android的Handler机制,不仅仅是这些知识点,博客还从更高的单件模式和MVC设计框架的视角来解析该项目,不过美中不足的是,standupTimer项目有一套完整的测试方案,在该博客中有提到,但是没有具体解析,希望有兴趣的博友能总结下并贴出来。
博客的地址是:http://www.cnblogs.com/keyindex/archive/2010/08/31/1809943.html
对于初学者来说,这个项目中有很多的知识点需要学习总结消化,而这些知识点见仁见智,不同的读者或者对不同的知识点感兴趣,我就我个人而言做些小知识点的总结,这篇博客总结的是standupTimer项目中的布局容器,这个知识点之前没有碰到过,所以总结在此。
standupTimer项目的主布局文件main.xml比较简单明了,包括七个组件,其中三个TextView分别用来显示与会人数(Number of participants),会议时长(Length of meeting)和与会小组名称(Team),一个EditText用来让用户输入与会人数,一个Spinner组件用来下拉显示小组名字,一个Button组件用来开始计时,这些都是比较常用的组件,还有一个是一个布局LinearLayout,这个布局组件就是用来动态加载View对象的,这是在xml文件中声明下,然后在代码中实例化,并根据用户设置情况进行动态加载View对象。

main.ml文件中的布局组件定义如下:

<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" />
在类ConfigureStandupTimer中对UI进行初始化的时候实例化容器,并根据用户设置填充对象:
private void initializeMeetingLength() {
	/*实例化容器,并删除容器中的所有View对象,以便重新加载*/
	ViewGroup meetingLengthContainer = (ViewGroup) findViewById(R.id.meeting_length_container);
	meetingLengthContainer.removeAllViews();

	View meetingLengthView = null;
	if (Prefs.allowVariableMeetingLength(this)) {/*读取用户设置,根据设置初始化View*/
               /*创建Text类型View组件*/
		meetingLengthView = createMeetingLengthTextBox();
	} else {
		/*创建Spinner类型View组件*/
		meetingLengthView = createMeetingLengthSpinner();
	}

	/*填充View对象到布局容器中*/
	meetingLengthContainer.addView(meetingLengthView);
}

/*创建Text组件的具体实现函数,注意要把Spinner类型组件赋值为null */
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;
}

/*创建Spinner组件的具体实现函数,注意要把Text类型组件赋值为null*/
private View createMeetingLengthSpinner() {
	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;
}
 类似资料: