当前位置:  编程技术>移动开发
本页文章导读:
    ▪RelativeLayout里惯用的位置属性        RelativeLayout里常用的位置属性------- 源自梦想、永远是你IT事业的好友、只是勇敢地说出我学到! ---------- android:layout_toLeftOf—— 该组件位于引用组件的左方 android:layout_toRightOf—— 该组件.........
    ▪ UINavigationController的根本用法        UINavigationController的基本用法第一.UINavigationController的基本概念 UINavigationController是用于构建分层应用程序的主要工具,管理者多个内容视图的换入和换出,自身提供了切换的动画效果. 第二..........
    ▪ Handler讯息机制的一些原理(直接用code讲解)       Handler消息机制的一些原理(直接用code讲解)package com.example.handlertest; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.app.Activity; import android.view.Men.........

[1]RelativeLayout里惯用的位置属性
    来源: 互联网  发布时间: 2014-02-18
RelativeLayout里常用的位置属性
------- 源自梦想、永远是你IT事业的好友、只是勇敢地说出我学到! ----------


android:layout_toLeftOf—— 该组件位于引用组件的左方

android:layout_toRightOf—— 该组件位于引用组件的右方

android:layout_above—— 该组件位于引用组件的上方

android:layout_below—— 该组件位于引用组件的下方

android:layout_alignParentLeft—— 该组件是否对齐父组件的左端

android:layout_alignParentRight—— 该组件是否齐其父组件的右端

android:layout_alignParentTop—— 该组件是否对齐父组件的顶部

android:layout_alignParentBottom—— 该组件是否对齐父组件的底部

android:layout_centerInParent—— 该组件是否相对于父组件居中

android:layout_centerHorizontal—— 该组件是否横向居中

android:layout_centerVertical—— 该组件是否垂直居中


------- 源自梦想、永远是你IT事业的好友、只是勇敢地说出我学到! ----------

    
[2] UINavigationController的根本用法
    来源: 互联网  发布时间: 2014-02-18
UINavigationController的基本用法

第一.UINavigationController的基本概念

UINavigationController是用于构建分层应用程序的主要工具,管理者多个内容视图的换入和换出,自身提供了切换的动画效果.

第二.基本样式

主要三部分:

1.导航栏:NavigationBar,在最上面,主要负责视图的弹出和控制主视图,高度是44px/32px(横过来),上面的logo是20*20px

2.内容视图,中间部分,用于显示内容

3.工具栏(UIToolBar),默认是隐藏的,用户可以自己添加工具栏,高度是44px/32px(横过来)

第三、示例代码:

    RootViewController *rootViewController=[[[RootViewController alloc] init] autorelease];
    NSLog(@"the first controller is %@",rootViewController.navigationController);
    UINavigationController *controller=[[[UINavigationController alloc] initWithRootViewController:rootViewController] autorelease];
    NSLog(@"the end controller is %@",rootViewController.navigationController);

输出结果是:

2013-09-10 19:21:13.236 simpleNavigation[1841:c07] the first controller is (null)

2013-09-10 19:21:13.239 simpleNavigation[1841:c07] the end controller is <UINavigationController: 0x892eb70>

分析:
在执行,下面语句之前
 UINavigationController *controller=[[[UINavigationController alloc] initWithRootViewController:rootViewController] autorelease];

rootViewController的navigatoncontroller为空,在执行了该语句之后navigationcontroller就有值了

    [self.navigationControllerpushViewController:secondVCanimated:YES];就可以实现跳转了

        [self.navigationControllersetToolbarHidden:NOanimated:YES];  //设置Toolbar是否显示

         [self.navigationControllersetNavigationBarHidden:NO]; //设置导航栏是否显示

第三UINavagitionController的代理,通过设置代理监听视图控制器的切换

    self.navigationController.delegate=self;

// Called when the navigation controller shows a new top view controller via a push, pop or setting of the view controller stack.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;







    
[3] Handler讯息机制的一些原理(直接用code讲解)
    来源: 互联网  发布时间: 2014-02-18
Handler消息机制的一些原理(直接用code讲解)
package com.example.handlertest;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * 通过一个demo来讲解下几种Handler处理的情况
 * 
 * 
 * 
 * 为了引入Handler消息机制,我们必须先知道“同步”和“异步”通信的差别
 * 
 * “同步”通信: 比如 我打电话给小明,跟小明进行对话,我必须等到和小明结束通话之后,才能再拨打其他人的电话
 * (同步就是发送一个请求之后,什么事都不做,一直等到结果返回后才继续做下面的事情)
 * 
 * "异步"通信: 比如 我给几个同学发送E-mail邮件,全部发送过去之后,不需要在这边等他们回复, 我还可以去做别的事情,他们回复的时候,邮箱系统会通知我
 * (异步就是发出请求之后,这个请求完成之后,通过状态,通知或者回调等方式来通知调用者处理的结果)
 * 
 * 
 * Handler机制的产生原因: 一个应用程序开启之后,首先会开启一个UI线程(主线程),顾名思义是用来管理界面中UI控件的,
 * 并对事件进行分发,比如一个Button的点击事件,android把事件分发到对应的Button上,来响应用户操作
 * 但由于用户有可能需要做一些耗时的操作(下载文件),但是android如果5秒钟界面没反应的话,就会提示
 * 用户关闭应用程序了,所以这时候需要把这些耗时的操作放在 子线程 中处理,子线程处理完成之后再去更新
 * UI线程中的界面,而Android的UI线程又是不安全的,这样意味着子线程中无法直接更新UI线程的界面,
 * 因此Android中设计了Handler来解决这个问题!
 * 
 * 解决方法: Handler运行在UI线程中,它与子线程可通过Message对象来传递数据,这时候,handler就承担了接收子线程
 * 传来的Message对象的责任,从而配合UI线程更新UI。
 * 
 * 
 * Handler消息机制:
 * 
 * 
 * 1.handler存取消息的原理:
 * 
 * Handler允许发送并处理Message消息,Message消息通过主线程的MessageQueue消息队列相关联的Message和
 * Runnable对象进行存取,当创建一个新的handler时(在主线程中创建),handler就属于当前主线程,主线程的
 * MessageQueue也同步创建,Handler会绑定到该主线程/消息队列中,这样,handler就可以通过主线程的消息队列
 * 发送和接收Message消息对象了
 * 
 * 
 * 2.Handler消息处理机制的几种情况[下面用代码来说明这几种情况]: 2.1 button1: 主线程中做Handler 2.2 button2:
 * 子线程中做Handler 2.3 button3: 把主线程创建的Handler传递给其他线程完成消息处理 2.4 button4:
 * 在其他线程中更新UI线程界面,它抛出异常,我们看看哈~!
 * 
 * 
 * 
 * 发送Message不会阻塞线程(异步),而接收消息处理会阻塞线程[当Handler处理完一个Message对象后才会接着去取下一个消息进行处理](同步)
 * 
 * 
 * 2013年09月11日23:37:08
 * 
 * @author xiaoyaomeng
 * 
 */

public class MainActivity extends Activity implements OnClickListener {
	HandlerDemo myHandlerDemo = null;// 该对象用于主线程中创建handler
	Button button1 = null;
	Button button2 = null;
	Button button3 = null;
	Button button4 = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		button1 = (Button) findViewById(R.id.button1);
		button2 = (Button) findViewById(R.id.button2);
		button3 = (Button) findViewById(R.id.button3);
		button4 = (Button) findViewById(R.id.button4);

		button1.setOnClickListener(this);
		button2.setOnClickListener(this);
		button3.setOnClickListener(this);
		button4.setOnClickListener(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		handlerDealMessage(v.getId());
	}

	private void handlerDealMessage(int id) {
		// TODO Auto-generated method stub
		switch (id) {
		case R.id.button1: {
			// 主线程中创建Handler实例
			myHandlerDemo = new HandlerDemo();
			Message message = myHandlerDemo.obtainMessage(1,
					(Object) ("Hello,My name is Handler1~~"));
			message.sendToTarget();// Handler发送消息,会对应发送到这个和这个Handler绑定的UI线程做处理
		}
			break;
		case R.id.button2: {
			MyThread myThread = new MyThread();
			myThread.start();
		}
			break;
		case R.id.button3: {
			myHandlerDemo = new HandlerDemo();
			OtherThread otherThread = new OtherThread(myHandlerDemo);
			otherThread.start();
		}
			break;
		case R.id.button4: {
			errorHandlerThread errorHandlerThread = new errorHandlerThread(
					button4);
			errorHandlerThread.start();
		}
			break;
		default:
			break;
		}
	}

	/*
	 * MyThread 是内部类,子线程
	 */
	private class MyThread extends Thread {
		@Override
		public void run() {
			// TODO Auto-generated method stub
			super.run();

			// 1.error: 只能在UI线程中采用不带Looper对象创建Handler对象,所以此处会报异常
			// myHandlerDemo = new HandlerDemo();

			// 2.error: Looper.myLooper获取的Looper是null,所以也会报异常
			// myHandlerDemo = new HandlerDemo(Looper.myLooper());

			// 通过Looper.getMainLooper()可以得到父类的looper,所以可以成功创建handler对象并绑定MessageQueue
			myHandlerDemo = new HandlerDemo(Looper.getMainLooper());
			Message message = myHandlerDemo.obtainMessage(2,
					(Object) ("Hello,My name is Handler2~~"));
			message.sendToTarget();

		}
	}

	private/**
			 * 创建一个Handler
			 * 
			 * @author xiaoyaomeng
			 *
			 */
	class HandlerDemo extends Handler {
		/* 在UI线程中创建handler时,可以直接调用这个构造函数 */
		public HandlerDemo() {
			super();
			// TODO Auto-generated constructor stub
		}

		/* 在子线程中创建一个Handler需要用到这个构造函数,否则报错 */
		public HandlerDemo(Looper looper) {
			super(looper);
			// TODO Auto-generated constructor stub
		}

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			super.handleMessage(msg);

			switch (msg.what) {
			case 1: {
				button1.setText(msg.obj.toString());
			}
				break;
			case 2: {
				button2.setText(msg.obj.toString());
			}
				break;
			case 3: {
				button3.setText(msg.obj.toString());
			}
				break;
			default:
				break;

			}

		}
	}
}

/**
 * 
 * 其他线程的类,用来接收一个handler,并在线程中 用这个handler发送消息
 * 
 * @author xiaoyaomeng
 * 
 */
class OtherThread extends Thread {
	private Handler mHandler;

	public OtherThread(Handler handler) {
		// TODO Auto-generated constructor stub

		mHandler = handler;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();

		Message message = mHandler.obtainMessage(3,
				(Object) ("Hello,My name is Handler3~~"));
		message.sendToTarget();

	}
}

/**
 * 测试错误报错的线程
 * 
 * @author xiaoyaomeng
 * 
 */
class errorHandlerThread extends Thread {

	Button button = null;

	public errorHandlerThread(Button button) {
		// TODO Auto-generated constructor stub
		this.button = button;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();

		button.setText("hahahaha~~~");

	}
}




Button4: 所报异常截图:



    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪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