当前位置:  编程技术>移动开发
本页文章导读:
    ▪通用方法解决UITextFiled输入时键盘遮挡有关问题        通用方法解决UITextFiled输入时键盘遮挡问题 http://www.codeios.com/thread-9770-1-1.html   我们在用键盘录入的时候,有可能会遮挡录入框,所以我们应调整UIView的位置,使其不被遮挡。我写了一个通用.........
    ▪ 完善实现自定义软键盘        完美实现自定义软键盘 原文   我相信是懒人推动了世界的发展,既然iphone有了自己的软件盘,我们什么还要自己实现其功能呢。so,只要寄生在上面就行了。通过这篇文章给的灵感:为UIKeybo.........
    ▪ 版本检测跟更新(转)       版本检测和更新(转) 版本检测和更新是每个应用程序必须做的一个功能,所以在这里晒下: import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.URL; import java.net..........

[1]通用方法解决UITextFiled输入时键盘遮挡有关问题
    来源: 互联网  发布时间: 2014-02-18
通用方法解决UITextFiled输入时键盘遮挡问题

http://www.codeios.com/thread-9770-1-1.html

 

我们在用键盘录入的时候,有可能会遮挡录入框,所以我们应调整UIView的位置,使其不被遮挡。我写了一个通用的方法可以解决这个问题:

  • - (void)moveView:(UITextField *)textField leaveView:(BOOL)leave  
  • {  
  •     UIView *accessoryView = textField.inputAccessoryView;  
  •     UIView *inputview     = textField.inputView;  
  •       
  •     int textFieldY = 0;  
  •     int accessoryY = 0;  
  •     if (accessoryView && inputview)   
  •     {  
  •         CGRect accessoryRect = accessoryView.frame;  
  •         CGRect inputViewRect = inputview.frame;  
  •         accessoryY = 480 - (accessoryRect.size.height + inputViewRect.size.height);  
  •     }  
  •     else if (accessoryView)  
  •     {  
  •         CGRect accessoryRect = accessoryView.frame;  
  •         accessoryY = 480 - (accessoryRect.size.height + 216);  
  •     }  
  •     else if (inputview)  
  •     {  
  •         CGRect inputViewRect = inputview.frame;  
  •         accessoryY = 480 -inputViewRect.size.height;  
  •     }  
  •     else  
  •     {  
  •         accessoryY = 264; //480 - 216;  
  •     }  
  •       
  •       
  •     CGRect textFieldRect = textField.frame;  
  •     textFieldY = textFieldRect.origin.y + textFieldRect.size.height + 20;  
  •       
  •     int offsetY = textFieldY - accessoryY;  
  •     if (!leave && offsetY > 0)   
  •     {  
  •         int y_offset = -5;  
  •           
  •         y_offset += -offsetY;  
  •           
  •         CGRect viewFrame = self.view.frame;  
  •           
  •         viewFrame.origin.y += y_offset;  
  •           
  •         [UIView beginAnimations:nil context:NULL];  
  •         [UIView setAnimationBeginsFromCurrentState:YES];  
  •         [UIView setAnimationDuration:0.3];  
  •         [self.view setFrame:viewFrame];  
  •         [UIView commitAnimations];  
  •     }  
  •     else  
  •     {  
  •         CGRect viewFrame = CGRectMake(0, 20, 320, 460);  
  •           
  •         [UIView beginAnimations:nil context:NULL];  
  •         [UIView setAnimationBeginsFromCurrentState:YES];  
  •         [UIView setAnimationDuration:0.3];  
  •         [self.view setFrame:viewFrame];  
  •         [UIView commitAnimations];  
  •     }  
  • }  
  • 复制代码

    用法很简单,在UITextFieldDelegate的两个方法里分别调用一下这个方法就OK了,如下示例:

  • - (void)textFieldDidBeginEditing:(UITextField *)textField  
  • {  
  •         [self moveView:textField leaveView:NO];  
  • }  
  •   
  • - (void)textFieldDidEndEditing:(UITextField *)textField;  
  • {  
  •     [self moveView:textField leaveView:YES];  
  • }  
  • 复制代码

        
    [2] 完善实现自定义软键盘
        来源: 互联网  发布时间: 2014-02-18
    完美实现自定义软键盘

    原文

     

    我相信是懒人推动了世界的发展,既然iphone有了自己的软件盘,我们什么还要自己实现其功能呢。
    so,只要寄生在上面就行了。

    通过这篇文章给的灵感:
    为UIKeyboardTypeNumberPad增加自定义按键
    http://www.codeios.com/thread-805-1-1.html


    思路:
    1.用静态方法找到应用程序当前view(window)中的UIKeyboard的view
    2.在键盘的view上帖上自己的view,(精彩了,这个自己的view就是你自己键盘,任意发挥,什么类型键盘都可以做了)
    3.根据需要调整系统键盘的大小以满足你想要的尺寸
    4.给自己的键盘view上的button添加方法,实现功能

    主要代码:
    添加自身类为键盘事件的观察者:

  • [[NSNotificationCenter defaultCenter] addObserver:self
  •                                              selector:@selector(keyboardWillShow:)
  •                                                  name:UIKeyboardWillShowNotification
  •                                                object:nil];
  • 复制代码
    核心思路代码:
  • - (void)keyboardWillShow:(NSNotification *)note
  • {  
  •     UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];//知识点
  •     for(int i=0; i<[tempWindow.subviews count]; i++)
  •     {
  •         keyboard = [tempWindow.subviews objectAtIndex:i];
  •         if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
  •         {
  •             [keyboard setFrame:CGRectMake(0, 460, 320, 345)];
  •             [self congfigKeypad];
  •             
  •             [keyboard addSubview:keyPadView1];
  •             
  •         }
  •     }
  • }
  • 复制代码
    比如配置方法可以是这样:
  • -(void)congfigKeypad
  • {
  •    SearBtn *one = [[SearBtn alloc] initWithFrame:CGRectMake(81, 3, kNumPadW, kNumPadH) index:1 ContextString:@"1" type:kNumPadType];
  •     [one setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
  •     [one addTarget:self action:@selector(buttonClickAtIndex:) forControlEvents:UIControlEventTouchUpInside];
  •         //......略
  • }
  • 复制代码
    添加NSMutalbeString作为文本域字串的容器,点击button后append的button对应的字串。
  • - (void)buttonClickAtIndex:(id)sender
  • {
  •     SearBtn *btnItem = (SearBtn*)sender;
  •     NSString *str = btnItem->btnText;
  •     [s_text appendString:str];
  •     [sBar setText:s_text];
  • }
  • 复制代码
    再实现一个deleteChar的方法作为退格键
    思路:
  • if ([s_text length] > 0)
  •     {
  •         NSRange rang;
  •         rang.location = [s_text length] - 1;
  •         rang.length = 1;
  •         [s_text deleteCharactersInRange:rang];
  •     }
  • 复制代码
    现在点击各种文本域,应该就可以现实自己的键盘了。

    继续优化
    用textfield的代理方法控制键盘的字串类型,长度,和响应消失:
     



        
    [3] 版本检测跟更新(转)
        来源: 互联网  发布时间: 2014-02-18
    版本检测和更新(转)
    版本检测和更新是每个应用程序必须做的一个功能,所以在这里晒下:


    
    
    import java.io.File;
    
    import java.io.FileOutputStream;
    
    import java.io.InputStream;
    
    import java.net.URL;
    
    import java.net.URLConnection;
    
    import android.app.Activity;
    
    import android.app.AlertDialog;
    
    import android.app.ProgressDialog;
    
    import android.content.Context;
    
    import android.content.DialogInterface;
    
    import android.content.Intent;
    
    import android.content.pm.PackageInfo;
    
    import android.content.pm.PackageManager.NameNotFoundException;
    
    import android.net.ConnectivityManager;
    
    import android.net.NetworkInfo;
    
    import android.net.Uri;
    
    import android.util.Log;
    
    import android.webkit.URLUtil;
    
    import com.autoupdate.R;
    
    
    /**
    
    * 版本检测,自动更新
    
    * 
    * @author shenyj-ydrh 1.通过Url检测更新 2.下载并安装更新 3.删除临时路径
    
    * 
    */
    
    public class MyAutoUpdate {
    
            // 调用更新的Activity
    
            public Activity activity = null;
    
            // 当前版本号
    
            public int versionCode = 0;
    
            // 当前版本名称
    
            public String versionName = "";
    
            // 控制台信息标识
    
            private static final String TAG = "AutoUpdate";
    
            // 文件当前路径
    
            private String currentFilePath = "";
    
            // 安装包文件临时路径
    
            private String currentTempFilePath = "";
    
            // 获得文件扩展名字符串
    
            private String fileEx = "";
    
            // 获得文件名字符串
    
            private String fileNa = "";
    
            // 服务器地址
    
            private String strURL = "http://127.0.0.1:8080/ApiDemos.apk";
    
            private ProgressDialog dialog;
    
    
            /**
    
             * 构造方法,获得当前版本信息
    
             * 
             * @param activity
    
             */
    
            public MyAutoUpdate(Activity activity) {
    
                    this.activity = activity;
    
                    // 获得当前版本
    
                    getCurrentVersion();
    
            }
    
    
            /**
    
             * 检测更新
    
             */
    
            public void check() {
    
                    // 检测网络
    
                    if (isNetworkAvailable(this.activity) == false) {
    
                            return;
    
                    }
    
                    // 如果网络可用,检测到新版本
    
                    if (true) {
    
                            // 弹出对话框,选择是否需要更新版本
    
                            showUpdateDialog();
    
                    }
    
            }
    
    
            /**
    
             * 检测是否有可用网络
    
             * 
             * @param context
    
             * @return 网络连接状态
    
             */
    
            public static boolean isNetworkAvailable(Context context) {
    
                    try {
    
                            ConnectivityManager cm = (ConnectivityManager) context
    
                                            .getSystemService(Context.CONNECTIVITY_SERVICE);
    
                            // 获取网络信息
    
                            NetworkInfo info = cm.getActiveNetworkInfo();
    
                            // 返回检测的网络状态
    
                            return (info != null && info.isConnected());
    
                    } catch (Exception e) {
    
                            e.printStackTrace();
    
                            return false;
    
                    }
    
            }
    
    
            /**
    
             * 弹出对话框,选择是否需要更新版本
    
             */
    
            public void showUpdateDialog() {
    
                    @SuppressWarnings("unused")
    
                    AlertDialog alert = new AlertDialog.Builder(this.activity)
    
                                    .setTitle("新版本").setIcon(R.drawable.ic_launcher)
    
                                    .setMessage("是否更新?")
    
                                    .setPositiveButton("是", new DialogInterface.OnClickListener() {
    
                                            public void onClick(DialogInterface dialog, int which) {
    
                                                    // 通过地址下载文件
    
                                                    downloadTheFile(strURL);
    
                                                    // 显示更新状态,进度条
    
                                                    showWaitDialog();
    
                                            }
    
                                    })
    
                                    .setNegativeButton("否", new DialogInterface.OnClickListener() {
    
                                            public void onClick(DialogInterface dialog, int which) {
    
                                                    dialog.cancel();
    
                                            }
    
                                    }).show();
    
            }
    
    
            /**
    
             * 显示更新状态,进度条
    
             */
    
            public void showWaitDialog() {
    
                    dialog = new ProgressDialog(activity);
    
                    dialog.setMessage("正在更新,请稍候...");
    
                    dialog.setIndeterminate(true);
    
                    dialog.setCancelable(true);
    
                    dialog.show();
    
            }
    
    
            /**
    
             * 获得当前版本信息
    
             */
    
            public void getCurrentVersion() {
    
                    try {
    
                            // 获取应用包信息
    
                            PackageInfo info = activity.getPackageManager().getPackageInfo(
    
                                            activity.getPackageName(), 0);
    
                            this.versionCode = info.versionCode;
    
                            this.versionName = info.versionName;
    
                    } catch (NameNotFoundException e) {
    
                            e.printStackTrace();
    
                    }
    
            }
    
    
            /**
    
             * 截取文件名称并执行下载
    
             * 
             * @param strPath
    
             */
    
            private void downloadTheFile(final String strPath) {
    
                    // 获得文件文件扩展名字符串
    
                    fileEx = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length())
    
                                    .toLowerCase();
    
                    // 获得文件文件名字符串
    
                    fileNa = strURL.substring(strURL.lastIndexOf("/") + 1,
    
                                    strURL.lastIndexOf("."));
    
                    try {
    
                            if (strPath.equals(currentFilePath)) {
    
                                    doDownloadTheFile(strPath);
    
                            }
    
                            currentFilePath = strPath;
    
                            new Thread(new Runnable() {
    
    
                                    @Override
    
                                    public void run() {
    
                                            // TODO Auto-generated method stub
    
                                            try {
    
                                                    // 执行下载
    
                                                    doDownloadTheFile(strPath);
    
                                            } catch (Exception e) {
    
                                                    Log.e(TAG, e.getMessage(), e);
    
                                            }
    
                                    }
    
                            }).start();
    
                    } catch (Exception e) {
    
                            e.printStackTrace();
    
                    }
    
            }
    
    
            /**
    
             * 执行新版本进行下载,并安装
    
             * 
             * @param strPath
    
             * @throws Exception
    
             */
    
            private void doDownloadTheFile(String strPath) throws Exception {
    
                    Log.i(TAG, "getDataSource()");
    
                    // 判断strPath是否为网络地址
    
                    if (!URLUtil.isNetworkUrl(/blog_article/strPath/index.html)) {
    
                            Log.i(TAG, "服务器地址错误!");
    
                    } else {
    
                            URL myURL = new URL(strPath);
    
                            URLConnection conn = myURL.openConnection();
    
                            conn.connect();
    
                            InputStream is = conn.getInputStream();
    
                            if (is == null) {
    
                                    throw new RuntimeException("stream is null");
    
                            }
    
                            //生成一个临时文件 
                            File myTempFile = File.createTempFile(fileNa, "." + fileEx);
    
                            // 安装包文件临时路径
    
                            currentTempFilePath = myTempFile.getAbsolutePath();
    
                            FileOutputStream fos = new FileOutputStream(myTempFile);
    
                            byte buf[] = new byte[128];
    
                            do {
    
                                    int numread = is.read(buf);
    
                                    if (numread <= 0) {
    
                                            break;
    
                                    }
    
                                    fos.write(buf, 0, numread);
    
                            } while (true);
    
                            Log.i(TAG, "getDataSource() Download  ok...");
    
                            dialog.cancel();
    
                            dialog.dismiss();
    
                            // 打开文件
    
                            openFile(myTempFile);
    
                            try {
    
                                    is.close();
    
                            } catch (Exception ex) {
    
                                    Log.e(TAG, "getDataSource() error: " + ex.getMessage(), ex);
    
                            }
    
                    }
    
            }
    
    
            /**
    
             * 打开文件进行安装
    
             * 
             * @param f
    
             */
    
            private void openFile(File f) {
    
                    Intent intent = new Intent();
    
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
                    intent.setAction(android.content.Intent.ACTION_VIEW);
    
                    // 获得下载好的文件类型
    
                    String type = getMIMEType(f);
    
                    // 打开各种类型文件
    
                    intent.setDataAndType(Uri.fromFile(f), type);
    
                    // 安装
    
                    activity.startActivity(intent);
    
            }
    
    
            /**
    
             * 删除临时路径里的安装包
    
             */
    
            public void delFile() {
    
                    Log.i(TAG, "The TempFile(" + currentTempFilePath + ") was deleted.");
    
                    File myFile = new File(currentTempFilePath);
    
                    if (myFile.exists()) {
    
                            myFile.delete();
    
                    }
    
            }
    
    
            /**
    
             * 获得下载文件的类型
    
             * 
             * @param f
    
             *            文件名称
    
             * @return 文件类型
    
             */
    
            private String getMIMEType(File f) {
    
                    String type = "";
    
                    // 获得文件名称
    
                    String fName = f.getName();
    
                    // 获得文件扩展名
    
                    String end = fName
    
                                    .substring(fName.lastIndexOf(".") + 1, fName.length())
    
                                    .toLowerCase();
    
                    if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")
    
                                    || end.equals("xmf") || end.equals("ogg") || end.equals("wav")) {
    
                            type = "audio";
    
                    } else if (end.equals("3gp") || end.equals("mp4")) {
    
                            type = "video";
    
                    } else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
    
                                    || end.equals("jpeg") || end.equals("bmp")) {
    
                            type = "image";
    
                    } else if (end.equals("apk")) {
    
                            type = "application/vnd.android.package-archive";
    
                    } else {
    
                            type = "*";
    
                    }
    
                    if (end.equals("apk")) {
    
                    } else {
    
                            type += "/*";
    
                    }
    
                    return type;
    
            }
    
    }
    
    


        
    最新技术文章:
    ▪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(请将#改为@)

    ▪Android录音应用实例教程 iis7站长之家