当前位置:  编程技术>移动开发
本页文章导读:
    ▪<viewStub /> <requestFocus /> <merge /> and <include />的运用        <viewStub />, <requestFocus />, <merge /> and <include />的使用 编写设计模式(DESIGNPATTERNS)的前辈们在具体的实践中总结出大量的经验,比如:如何才能高效的处理问题?如何才能.........
    ▪ 标签栏与提选器的使用        标签栏与选取器的使用 我们要实现下面的效果,就是通过下方的标签栏切换视图来显示不同的选取器首先创建工程,选择Window-Based Application模板,取项目名称为Picker。生成后选中Classes文件.........
    ▪ 一些惯用设置,标记一下       一些常用设置,标记一下 设置全屏: 必须在setContentView()之前调用 否则会报错:android.util.AndroidRuntimeException: requestFeature() must be called before adding content   // Full screen // 隐藏Title(其中是项目.........

[1]<viewStub /> <requestFocus /> <merge /> and <include />的运用
    来源: 互联网  发布时间: 2014-02-18
<viewStub />, <requestFocus />, <merge /> and <include />的使用
编写设计模式(DESIGNPATTERNS)的前辈们在具体的实践中总结出大量的经验,比如:如何才能高效的处理问题?如何才能更科学的安排架构或者合理的复用现有资源?等等…其中有提到对现有资源的复用,这是整个设计模式精髓理论之一,因为资源复用被应用于设计模式大部分的模块中。

 
简单或复杂的问题都需要时常考虑如何优化资源的分配。比如一个功能很简单的应用程序,它会调用一些我们常用的对话框或者输入面板,这需要采用统一的方式来针对不同的应用程序制定统一标准。
当我们面对Android UI优化时,有必要继续考虑资源复用。手机开发给我们的直观感觉是运行其上的软件应该尽可能的达到资源高效利用的极致,而不能像开发PC机那样,似乎有用之不尽的资源。
定义Android Layout(XML)时,有四个比较特别的标签是非常重要的,其中有三个是与资源复用有关,分别是 <viewStub />, <requestFocus />, <merge /> and <include />。可是以往我们所接触的案例或者官方文档的例子都没有着重去介绍这些标签的重要性。


<viewStub  />: 此标签可以使UI在特殊情况下,直观效果类似于设置View的不可见性,但是其更大的(R)意义在于被这个标签所包裹的Views在默认状态下不会占用任何内存空间。viewStub通过include从外部导入Views元素。
用法:通过android:layout来指定所包含的内容。默认情况下,ViewStub所包含的标签都属于visibility=GONE。viewStub通过方法inflate()来召唤系统加载其内部的Views。<ViewStub android:id="@+id/stub"
android:inflatedId="@+id/subTree"
android:layout="@layout/mySubTree"
android:layout_width="120dip"
android:layout_height="40dip" />

<merge />: 将在下一篇做详细介绍。
<include />:可以通过这个标签直接加载外部的xml到当前结构中,是复用UI资源的常用标签。
用法:将需要复用xml文件路径赋予include标签的Layout属性。<include android:id="@+id/cell1" layout="@layout/ar01" />
<include android:layout_width="fill_parent" layout="@layout/ar02" />

<requestFocus />: 标签用于指定屏幕内的焦点View。
用法: 将标签置于Views标签内部<EditText id="@+id/text"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_weight="0"
             android:paddingBottom="4">
       <requestFocus />
</EditText>

    
[2] 标签栏与提选器的使用
    来源: 互联网  发布时间: 2014-02-18
标签栏与选取器的使用
我们要实现下面的效果,就是通过下方的标签栏切换视图来显示不同的选取器






首先创建工程,选择Window-Based Application模板,取项目名称为Picker。生成后选中Classes文件夹,从File中选择new File,再选择UIViewController subclass图标,顺便点选下面的第三项-with xib for user interface,分别取名为DatePicker,SingleComponentPicker,DoubleComponentPicker,生成之后将.xib文件拖入Resources文件夹中。
先添加根视图控制器,单击PickerAppDelegate.h类
#import <UIKit/UIKit.h>
@interface PickersAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
	UITabBarController *rootController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *rootController;
@end

单击PickerAppDelegate.m
@synthesize window;
@synthesize rootController;
#pragma mark -
#pragma mark Application lifecycle
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    [window addSubview:rootController.view];
    [window makeKeyAndVisible];
    return YES;
}
- (void)dealloc {
    [rootController release];
    [window release];
    [super dealloc];
}

双击MainWindow.xib,从库中拖出一个Tab Bar Controller到nib主窗口,这样会出现一个新的窗口

起初下面只有两个标签,图上的3个标签是又添加上去了1个,选中新出现的窗口,按下花+1打开他的属性,点+,就能添加标签。

为了使每一个标签都能与对应的nib相关联,我们选中第一个。保留title为空,将nib name指定为DatePickerView,按花+4,将类改为DatePicker,再点中标签可以改变标签的名称。以此类推,完成剩下标签的相关连。



再nib主窗口中按住Ctrl将Picker App Delegate拖到Tab Bar Controller图标中。
单击DatePicker.h,完成代码
#import <UIKit/UIKit.h>
@interface DatePicker : UIViewController {
	IBOutlet UIDatePicker *datePicker;
}
@property (nonatomic,retain) UIDatePicker *datePicker;
-(IBAction)buttonPressed;
@end

单击DatePicker.m,完成代码
@synthesize datePicker;
-(IBAction)buttonPressed{
	NSData *selected = [datePicker date];
	NSString *message = [[NSString alloc] initWithFormat:@"The date and time is:%@",selected];
	UIAlertView *alert = [[UIAlertView alloc]
						  initWithTitle:@"Data and Time Selected" 
						  message:message 
						  delegate:nil 
						  cancelButtonTitle:@"Yes,I did" 
						  otherButtonTitles:nil];
	[alert show];
	[alert release];
	[message release];
}
- (void)viewDidLoad {
	NSDate *now = [[NSDate alloc] init];
	[datePicker setDate:now animated:YES];
	[now release];
    [super viewDidLoad];
}
- (void)dealloc {
	[datePicker release];
    [super dealloc];
}

这样第一个视图就完成了。
进行第二个,单个组件选取器,在SingleComponentPicker.h中声明输出口和操作
#import <UIKit/UIKit.h>
@interface SinglecomponentPickerViewController : UIViewController 
	<UIPickerViewDelegate,UIPickerViewDataSource>{
		IBOutlet UIPickerView *singlePicker;
		NSArray *pickerData;
}
@property (nonatomic,retain) UIPickerView *singlePicker;
@property (nonatomic,retain) NSArray *pickerData;
-(IBAction)buttonPressed;
@end

在相应的.xib中创建相应视图,一个Picker View和一个按钮,并完成如下关联




在相应.m文件中进行编码
@synthesize singlePicker;
@synthesize pickerData;
-(IBAction)buttonPressed{
	NSInteger row = [singlePicker selectedRowInComponent:0];
	NSString *selected = [pickerData objectAtIndex:row];
	NSString *title = [[NSString alloc] initWithFormat:@"You selected %@!",selected];
	UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title 
						message:@"Thank you for choosing!" 
						delegate:nil 
						cancelButtonTitle:@"you'are welcome." 
						otherButtonTitles:nil];
	[alert show];
	[alert release];
	[title release];
}
- (void)viewDidLoad {
	NSArray *array = [[NSArray alloc] initWithObjects:@"Inter Milan",@"AC Milan",@"Arsenal",@"Liverpool",@"Chelsea",@"Newcastle",@"Manchester United",@"Real Madrid",nil];
	self.pickerData = array;
	[array release];
}
- (void)dealloc {
	[singlePicker release];
	[pickerData release];
    [super dealloc];
}
#pragma mark -
#pragma mark Picker Data Source Methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
	return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
	return [pickerData count];
}
#pragma mark Picker Delegate Methods
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
	return [pickerData objectAtIndex:row];
}
@end

第二个视图也就完成了,下面创建第三个,在DoubleComponentPicker.h中声明输出口和操作
#import <UIKit/UIKit.h>
#define kFillingComponent 0
#define kBreadComponent 1
@interface DoublecomponentPickerViewController : UIViewController 
			<UIPickerViewDelegate,UIPickerViewDataSource>{
				IBOutlet UIPickerView *doublePicker;
				NSArray *fillingTypes;
				NSArray *breadTypes;
}
@property (nonatomic,retain)UIPickerView *doublePicker;
@property (nonatomic,retain)NSArray *fillingTypes;
@property (nonatomic,retain)NSArray *breadTypes;
-(IBAction)buttonPressed;
@end

控件的形式和关联和第二个视图中一样,可以参考。在相应的.m文件中进行编码
@synthesize doublePicker;
@synthesize fillingTypes;
@synthesize breadTypes;
-(IBAction)buttonPressed{
	NSInteger breadRow = [doublePicker selectedRowInComponent:kBreadComponent];
	NSInteger fillingRow = [doublePicker selectedRowInComponent:kFillingComponent];
	NSString *bread = [breadTypes objectAtIndex:breadRow];
	NSString *filling = [fillingTypes objectAtIndex:fillingRow];
	NSString *message = [[NSString alloc] initWithFormat:@"your %@ on %@ bread will be right up.",filling,bread];
	UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Thank you" 
						message:message 
						delegate:nil 
						cancelButtonTitle:@"Great" 
						otherButtonTitles:nil];
	[alert show];
	[alert release];
	[message release];
}
- (void)viewDidLoad {
    NSArray *breadArray = [[NSArray alloc] initWithObjects:@"Inter Milan",@"AC Milan",@"Arsenal",@"Liverpool",@"Chelsea",@"Newcastle",@"Manchester United",@"Real Madrid",nil];
	self.breadTypes = breadArray;
	[breadArray release];
	
	NSArray *fillingArray = [[NSArray alloc] initWithObjects:@"Raul",@"AC Milan",@"Arsenal",@"Liverpool",@"Chelsea",@"Newcastle",@"Manchester United",@"Real Madrid",nil];
	self.fillingTypes = fillingArray;
	[fillingArray release];
}
- (void)dealloc {
	[doublePicker release];
	[breadTypes release];
	[fillingTypes release];
    [super dealloc];
}
#pragma mark -
#pragma mark Picker Data Source Methods

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
	
	return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
	if (component == kBreadComponent) {
		return [self.breadTypes count];
	}
	return [self.fillingTypes count];
}
#pragma mark Picker Delegate Methods
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
	if (component == kBreadComponent) {
		return [self.breadTypes objectAtIndex:row];
	}
	return [self.fillingTypes objectAtIndex:row];
}
@end

这样就结束了

    
[3] 一些惯用设置,标记一下
    来源: 互联网  发布时间: 2014-02-18
一些常用设置,标记一下

设置全屏:

必须在setContentView()之前调用

否则会报错:android.util.AndroidRuntimeException: requestFeature() must be called before adding content

 

// Full screen

// 隐藏Title(其中是项目名称)
requestWindowFeature(Window.FEATURE_NO_TITLE);

// 隐藏系统的工具栏		
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                    WindowManager.LayoutParams.FLAG_FULLSCREEN);

 

设置软键盘不弹出:

 

// 关掉软键盘
		
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
	.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
					InputMethodManager.HIDE_NOT_ALWAYS);

 

 

 

几种表示大小的单位:

px(pixels) 像素 : 与设备相关。

dip/dp(device independent pixels) 设备独立像素 : 不依赖于设备,支持 WVGA 、 HVGA 等。布局时尽量使用单位 dip ,少使用 px 。

sp(scaled pixels) 放大像素 : 一般用于字体。

 

padding vs margin

padding 是该元素的主要内容到边框的距离 , 即内边距; 一般描述控件内容和控件的位置关系。

margin 是边框距离其他元素的距离,即外边距; 一般用来描述控件间 位置关系

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android录音应用实例教程 iis7站长之家
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3