当前位置:  编程技术>移动开发
本页文章导读:
    ▪(7)常用控件:TextView EditView        (七)常用控件:TextView EditView TextView   布局: <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" .........
    ▪ 短信阻截        短信拦截         最近写一个应用(A),需要拦截短信分析。一般是这样实现的:注册一个接受短信Intent-Filter,获取短信广播,分析短信内容然后相应处理。对特定短信终止广播继续.........
    ▪ object-c 中for循环的两种形式       object-c 中for循环的两种方式 在java中就有两种for的循环写法,同样,在oc中也有两种写法:          第一种:这种是最常用的方式,也是大多数程序员熟悉的方式,                       .........

[1](7)常用控件:TextView EditView
    来源: 互联网  发布时间: 2014-02-18
(七)常用控件:TextView EditView

TextView

 

布局:

<TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="@string/hello_world"
        tools:context=".MainActivity" />

 

调用:

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mTextView=(TextView)findViewById(R.id.textview);获得控件
		mTextView.setText("我的第一个文本");设置文本内容
	        mTextView.setTextColor(Color.GREEN);设置字体颜色
	        mTextView.setBackgroundColor(color.black);}设置背景 这些也可在xml中设置



 

 

当出现URL E-mail 电话号码时,可以为TextView设置链接:

四种方法实现:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
<!-- xml属性实现,添加  android:autoLink="all"实现,为所有种类添加链接-->
    <TextView 
        android:id="@+id/tv01"        
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:autoLink="all"
        android:text="@string/first_link"
        />   
<!--通过<a>标签的string资源文件实现-->
    <TextView 
        android:id="@+id/tv02"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/second_link"
        />
<!-- 通过在java代码中使用html实现 -->    
    <TextView
        android:id="@+id/tv03"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"       
        />
<!-- 通过java代码直接实现 -->
    <TextView
        android:id="@+id/tv04"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"       
        />                     
</LinearLayout>

 

public class MainActivity extends Activity {


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	//设置textview可点击,实现第二种方式	
	TextView t2=(TextView)findViewById(R.id.tv02);
	t2.setMovementMethod(LinkMovementMethod.getInstance());
	//使用第三种方式实现
	TextView t3=(TextView)findViewById(R.id.tv03);
	t3.setText(
			Html.fromHtml("<b>text3:</b>"+"<a href=/index.html"http://www.google.com\">连接到google</a>")
			);
	t3.setMovementMethod(LinkMovementMethod.getInstance());
	
	//创建一个spannablestring对象
	SpannableString ss=new SpannableString("text4:点击这里拨打电话,点击这里链接到google");
	
	ss.setSpan(new StyleSpan(Typeface.BOLD), 0, 6, 
			Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//0-6个字符为粗体
	ss.setSpan(new URLSpan("tel:415113464"), 9, 11, 
			Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//9-11为拨号链接
	ss.setSpan(new URLSpan("http://www.google.com"), 18, 20,
			Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//18-20为网站链接
	ss.setSpan(new BackgroundColorSpan(Color.RED), 23, 29, 
			Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//23-29为红色
	TextView t4=(TextView)findViewById(R.id.tv04);
	t4.setText(ss);
	//实现第四种方式
	t4.setMovementMethod(LinkMovementMethod.getInstance());
	
	}}

 

String:

 <string name="first_link">
   <b>第一种方式</b>
       通过xml属性实现的链接:www.google.cn,
       电话:12345645647
   </string>
   <string name="second_link">
       <b>第二种方式</b>
       <a href="http://www.google.com">google</a>
   </string>

 

 

 

EditText:

android:hint                         编辑框空是显示的字符

android:textColorHint           编辑框空时显示字符的颜色

android:inputType                 限制输入内容的类型,number,text等

android:digits                        限制输入内容,只可取制定的字符

android:maxLenth                 限制输入的最长字符数

android:inputType="textPassword"    输入密码模式

 

妈呀,一个英文的引号,写成了中文的引号了,结果出了其它一堆错误,怎么改都不对。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView      
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/yh"
        />
   
    <EditText
        android:id="@+id/et"     
        android:textColorHint="#ff2323"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/yonhuming"/>
    
    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/mm"
        />
    <EditText 
        android:id="@+id/et1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:hint="@string/mima"
        />
    <TextView
        android:id="@+id/tv"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:textSize="20sp"        
        />            
</LinearLayout>

 

 

package example.first;

import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.TextView;
import android.app.Activity;

public class MainActivity extends Activity {
     private EditText et;
     private EditText et1;
     private TextView tv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		et=(EditText)findViewById(R.id.et);
		et1=(EditText)findViewById(R.id.et1);
		tv=(TextView)findViewById(R.id.tv);
		
		//设置监听器
		et1.setOnKeyListener(new OnKeyListener()
		{
			@Override
			public boolean onKey(View v,int keyCode,KeyEvent event){
				if(keyCode==KeyEvent.KEYCODE_ENTER){
					tv.setText("您的用户名为:"+et.getText().toString()+
							"\n"+"您的密码为:"+et1.getText().toString());
				}
				return false;
			}
		});
	}
		
}

 

运行结果:点击回车后显示用户名和密码

 



 

 


    
[2] 短信阻截
    来源: 互联网  发布时间: 2014-02-18
短信拦截
        最近写一个应用(A),需要拦截短信分析。一般是这样实现的:注册一个接受短信Intent-Filter,获取短信广播,分析短信内容然后相应处理。对特定短信终止广播继续(abort方法),阻止其进入收件箱。大致就是这么一个过程。

但上述方式,在QQ通讯录/360/飞信存在的情况下,拦截短信失败~也就是说它们抢先拿到了收短信的广播,并将其中断了。那么如何解决这个问题呢~

本来以为腾讯是拦截ril层的消息,然后阻止广播继续,但是这种方式要修改framework才能实现。

后来发现存在广播接收器(Receiver)的Intent-Filter的优先级(priority),SDK里说Prioruty的范围是-1000~1000,若设为一千以上好像跟1000的效果一样。然后我在A应用中的Manifest里将Receiver的Intent-Filter优先级设为1000,但测试结果还是被QQ通讯录抢先。

        进一步Google后,得到下面的结论:
反编译QQ通讯录/360手机卫士,发现些许奥秘。貌似这个涉及到Broadcast的分发机制,参考底层代码应该比较好解释~
广播分为2中,无序和有序。可以理解为散列和队列。

首先无序广播,不能中断,所有注册相应Intent-Filter的Reciver都可以接收到~

其次是有序广播,可以中断。它的消息是按优先级传送的,任何一个Receiver在接收后,可以使用abort将其停止,这样就导致了后续的Receiver不能收到广播。

        下面是一个猜想,做了些测试,也基本符合~

假设广播接收器的优先级都设为最大整型2147483647,首先动态注册优先级最高,其次是静态注册。在动态注册中,最早注册的优先级最高。在静态注册中,最早安装的程序,优先级最高(注:安装apk会解析af.xml,把其加入队列)

在反编译360后,发现其静态注册的广播接收器里设置的优先级数值为2147483647,然后再广播中启动一个service,在service中注册一个优先级为2147483647的同样地广播接收器。也就是说,假设现在进程全杀,那么短信来了,360和QQ通讯录,谁先安装,谁的静态注册广播接收器就会先启动,然后把广播中断,而且它还启动了一个service又动态注册一个Receiver。这样,它的优先级就排在了所有静态接收器之前了。

        所以,我们做个试验,以同样的方式:
首先写一个应用,注册一个开机完成的Receiver


<receiver android:name=".MyBrocast" android:permission="android.permission.BROADCAST_SMS">
            <intent-filter android:priority="2147483647">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
            <intent-filter android:priority="2147483647">
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
</receiver>


然后再这个Receiver接收到开机广播后,立即启动一个service
public void onReceive(Context context, Intent intent) {
                Log.v("MyBrocast.onReceive", "testtttttttttttt");
                if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
                        Intent service=new Intent(context, MyService.class);
                        context.startService(service);
                }
}


然后在service中重新动态注册一个Receiver,优先级为2147483647
IntentFilter localIntentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
localIntentFilter.setPriority(2147483647);
MyBrocast localMessageReceiver =new MyBrocast();
Log.v("MyBrocast.onReceive", "onCreate");
Intent localIntent = registerReceiver(localMessageReceiver,localIntentFilter);


重启手机就OK了,抢先360、QQ拦截短信~因为360/QQ并没有在接受开机广播后,动态注册短信广播的接收器。这样重启后A应用就可以在它们之前拦截到短信了~

但上述抢先方式,付出的代价是,A应用需要一直有这么一个service后台运行。一旦被杀,优先权又回被360/QQ抢占,只有等到下次重启。除非A应用在QQ/360之前安装到手机上~

        总结一下:
具体的顺~ 代码动态注册的Intent-Filter高于manifest静态注册的Intent-Filter。动态注册中的Intent-Filter在相同优先级下(如整型的最大值),接受顺序是按照动态注册的时间顺序。静态注册中Intent-Filter在相同优先级下,接受顺序是apk的安装顺序。

参考帖子:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=148381

    
[3] object-c 中for循环的两种形式
    来源: 互联网  发布时间: 2014-02-18
object-c 中for循环的两种方式

在java中就有两种for的循环写法,同样,在oc中也有两种写法:

         第一种:这种是最常用的方式,也是大多数程序员熟悉的方式,

                      for(int i = 0;i<n;i++){

//your code

}

第二种方式:这种方式又叫for each循环格式如下:

 

比如有一个数组 NSArray* array,存放的数据类型为UIVeiw

                         for(UIView* v in array){

//your code

}


    
最新技术文章:
▪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