Android小代码-技巧积累

string.xml中添加空格

假设TextView引用了string.xml中的常量,若要在字符串开头添加空格或制表符,或者在字符串中间显示多个空格符,直接键盘敲入空格是不会在控件中起作用,需要使用: " " 或者 "\t"等特殊字符:

  1. <string name="test1">\t填写&#160;&#160;&#160;&#160;手机号</string>  
  2. <string name="test2">     输入密码(6-14位)</string><!-- 开头空格无效-->  
  3. <string name="test3">已阅读       并同意xx协议</string><!-- 中间部分只显示一个空格 -->  
eclipse会提示test2中的"6-14"最好做修改 :   Replace "-" with an "en dash" character (–, &&;#8211;) ?  

处理方法是将"-"替换为"&#8211;"即可;

P.S.:带html用法;

带边框的TextView

可以自定义控件或设置背景(9patch或shape图片)来实现:
1.创建textview_border.xml的shape文件:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:shape="rectangle" >  
  4.     <solid android:color="@android:color/white"/>  
  5.     <corners android:radius="5dip"/>  
  6.     <stroke android:width="1dip" android:color="#CBCBCB"/>  
  7. </shape>  
设置TextView控件的背景:
  1. android:background="@drawable/regist_login_textview_border"  
效果如下:


TextView添加删除线

  1. mTextView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);  

密码输入框内容的显示和隐藏

EditText属性:android:inputType="textPassword"
通过增加一个CheckBox来改变是否明文显示输入内容:
  1. if(isChecked){  
  2.     //显示密码框内容  
  3.     mEditPwd.setInputType(InputType.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_NORMAL);  
  4.     //mEditPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());  
  5. }else{  
  6.     //隐藏密码框内容  
  7.     mEditPwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);  
  8.     //mEditPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());  
  9. }  
  10. mEditPwd.setSelection(mEditPwd.getText().toString().length());//设置光标位置在文本框末尾  
以上两种方式都可以;
备注:"InputType.TYPE_CLASS_TEXT "表示都要添加,否则光标不显示;


让Activity全屏

  1. 在AndroidManif.xml对应的Activity节点中配置theme属性,如下:
    1. android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"  
  2. 在Activity的onCreate()方法中设置:
    1. @Override  
    2. protected void onCreate(Bundle savedInstanceState) {  
    3.     super.onCreate(savedInstanceState);  
    4.     //隐藏标题栏,必须写在setContentView()之前  
    5.     requestWindowFeature(Window.FEATURE_NO_TITLE);  
    6.     //隐去状态栏(电池等图标)  
    7.     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,   
    8.             WindowManager.LayoutParams.FLAG_FULLSCREEN);  
    9.     setContentView(R.layout.activity_main);  
    10. }  
    若只是通过代码来隐藏标题栏,则可以看到标题栏的消失动画(官方模拟器4.3测试),连同状态栏一起隐藏的话则无此问题;


禁止横竖屏切换

在manifest.xml中对activity进行设置:
  1. android:screenOrientation="portrait"  
landscape -- 横向,portrait -- 纵向
引申: android:configChanges=”keyboardHidden|orientation” onConfigurationChanged(Configuration newConfig) 

获得程序版本号

  1. try {  
  2.     PackageManager pkgMgr = getPackageManager();  
  3.     PackageInfo info = pkgMgr.getPackageInfo(this.getPackageName(), 0);  
  4.     String versionName = info.versionName;  
  5. catch (NameNotFoundException e) {  
  6.     e.printStackTrace();  
  7. }  


获取网络状态

  1. import android.content.Context;  
  2. import android.net.ConnectivityManager;  
  3. import android.net.NetworkInfo;  
  4.   
  5. public final class ConnectivityUtils {  
  6.   
  7.     private static ConnectivityManager connMgr = null;  
  8.     private static NetworkInfo info = null;  
  9.     private static int type = -1// -1 表示无网络 ConnectivityManager.TYPE_NONE  
  10.   
  11.     public static boolean isConnectivityAvailable(Context context) {  
  12.         connMgr = (ConnectivityManager) context  
  13.                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
  14.         info = connMgr.getActiveNetworkInfo();  
  15.         if (info == null) {  
  16.             return false;  
  17.         }  
  18.         type = info.getType();  
  19.         return info.isAvailable();  
  20.     }  
  21.   
  22.     public static boolean isWifiAvailable(Context context) {  
  23.         if (!isConnectivityAvailable(context)) {  
  24.             return false;  
  25.         }  
  26.         return type == ConnectivityManager.TYPE_WIFI;  
  27.     }  
  28.   
  29.     public static boolean isMobileAvailable(Context context) {  
  30.         if (!isConnectivityAvailable(context)) {  
  31.             return false;  
  32.         }  
  33.         return type == ConnectivityManager.TYPE_MOBILE;  
  34.     }  
  35. }  
通常在app中可能多出调用,这里直接做成了工具类,所以使用了final/static;
另外,需要添加访问网络状态的权限:
  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  

发送简单短信

对于简单的文本短信,可以通过SmsManager来进行发送:
  1. <uses-permission android:name="android.permission.SEND_SMS" />  
  1. // 发送短信  
  2. SmsManager sms = SmsManager.getDefault();  
  3. // sms.sendTextMessage("收信人号码", "发件人号码,null表示当前设备可用号码", "发送内容", null, null);  
  4. sms.sendTextMessage(destinationAddress, null, message, nullnull);  
不过,若是短信太长,就会出错,粗略测试了一下,我的电信卡单条短信160~180个字时就会发生异常,因此需要对短信进行切割,分段发送:
  1. if (message.length() > 70) {  
  2.     List<String> texts = sms.divideMessage(message);  
  3.     for (String text : texts) {  
  4.         sms.sendTextMessage(destinationAddress, null, text, nullnull);  
  5.     }  
  6. else {  
  7.     sms.sendTextMessage(destinationAddress, null, message, nullnull);  
  8. }  
备注:这种方式是后台发送;
介绍另一种发短信方法:
  1. public void sendSMS(Context context, String content) {  
  2.     Uri uri = Uri.parse("smsto:153920*****");  
  3.     Intent intent = new Intent(Intent.ACTION_SENDTO,uri);  
  4.     intent.putExtra(intent.EXTRA_TEXT, content);  
  5.     context.startActivity(intent);  
  6. }  
不过这种方式需要手动单击发送;


分享简单文本信息

  1. public void shareText(Context context, String content) {  
  2.     Intent intent = new Intent(Intent.ACTION_SEND);  
  3.     intent.setType("text/plain");  
  4.     intent.putExtra(Intent.EXTRA_TEXT, content);  
  5.     context.startActivity(Intent.createChooser(intent, content));  
  6. }  
系统会创建一个选择器,列出符合intent要求的app,从中选择再发送即可达到分享的目的,该方法也可以用来发送短信,只不过收件人需要手动填写;
关于Intent的action还有很多内容,可参考 此文;

Activity毛玻璃半透明效果

  1. 在styles.xml中设置自定义style:
    1. <style name="HalfTranslucent" parent="@android:style/Theme.Translucent">  
    2.     <item name="android:windowBackground">@color/half_tra</item>  
    3.     <item name="android:windowNoTitle">true</item>  
    4.     <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>  
    5. </style>  
  2. 在string.xml或color.xml中添加色彩:
    1. <color name="half_tra">#90000000</color>  
  3. 在manifest.xml中设置Activity主题:
    1.  <activity  
    2.             android:name=".SecondActivity"  
    3.             android:theme="@style/HalfTranslucent"  
    4.             android:label="@string/title_activity_second" >  
    5. </activity>  
    我测试的效果貌似没网上那么好看,另外,测试过程中还碰到的问题:
    a. 反编译他人的apk文件会出现类似如下情况的语句,多了个星号,删掉即可 
    1. "@*android:style/Theme.Translucent"  
    b.运行时报错:
    1. java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.  
    我的adt插件版本23,新建工程时会有appcompat_v7库存在,在创建activity时默认继承的是actionbarActivity,改成Activity类即可;

引用http://blog.csdn.net/zxz_tsgx/article/details/38343333

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值