当前位置:  编程技术>移动开发
本页文章导读:
    ▪在Nexus7实机下运行自己的应用        在Nexus7实机上运行自己的应用 这几天学习android应用开发,发现安装完android sdk和eclipse用插件以后,虽然可以用vm来模拟nexus7运行开发的应用,但是在windows7下,eclipse无论如何也识别不了nexue7.........
    ▪ 监听输入框值的即刻变化onpropertychange、oninput        监听输入框值的即时变化onpropertychange、oninput要达到的效果     首先,我们需要了解onchange和onpropertychange的不同: onchange在属性值改变时还必须使得当前元素失去焦点(onblur)才可以激活该事.........
    ▪ UITextField滑动防止被键盘堵住 终极解决方案       UITextField滑动防止被键盘挡住 终极问题:当屏幕下方有textfield时会被弹出的键盘挡住,用户体验不太好。 坚决方法:使用scroll view 当textfield成为first responder时 将textfield滑动到键盘上面 网上.........

[1]在Nexus7实机下运行自己的应用
    来源: 互联网  发布时间: 2014-02-18
在Nexus7实机上运行自己的应用

这几天学习android应用开发,发现安装完android sdk和eclipse用插件以后,虽然可以用vm来模拟nexus7运行开发的应用,但是在windows7下,eclipse无论如何也识别不了nexue7的实机。

 

谷歌了一下,发现需要安装Nexus7的USB驱动。

1. 用文本编辑器打开以下文件

    %android sdk的安装文件夹%\extras\google\usb_driver\android_winusb.inf

    

 

2. 如果你的os是32位的,在文件中找到[Google.NTx86],

    如果你的os是64位的,在文件中找到[Google.NTamd64]



 

3. 在里面插入以下内容, 并保存关闭

;Google Nexus 7

%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40

%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E41

%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E42

%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E42&MI_01

%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E44&MI_01

 

 4. 打开Nexus7, 用usb连接上电脑。并且在[设置]-[开发者选项]里,把[usb调试]打上勾。

 5. 在电脑上, 打开设备管理器,里面会出现带感叹号的Nexus设备

 6. 在感叹号上点击鼠标右键,选择“更新软件驱动”     


 

 7. 按照以下的流程选择先前编辑好的android_winusb.inf

     (由于自己使用的是日文版的操作系统,截图都是日文的, 请在操作过程中和实际使用的操作系统对比着进行)

     

 


 

 

 

 

 

 

 

 


8. 安装完毕打开设备管理器,就会发现感叹号已经消失,恭喜,系统已经设别你的Nexus7了。

    

 


    
[2] 监听输入框值的即刻变化onpropertychange、oninput
    来源: 互联网  发布时间: 2014-02-18
监听输入框值的即时变化onpropertychange、oninput
要达到的效果

    很多情况下我们都会即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感。比如即时显示输入框已经被输入的字节数,或者即时读取输入的值来进行搜索引导,也就是google的关联搜索效果等。


    只要我们能捕获即时事件就能做到很多事情。

需要了解的知识

    首先,我们需要了解onchange和onpropertychange的不同:

    IE下,当一个HTML元素的属性改变的时候,都能通过 onpropertychange来即时捕获。
onchange在属性值改变时还必须使得当前元素失去焦点(onblur)才可以激活该事件。

    了解这一点后我们发现onpropertychange的效果就是我们想要的,可是很遗憾,它只在IE下有效果。我们能不能找到另外一个时间来代替onpropertychange呢?

    经过翻阅资料得知,在其他浏览器下可以使用oninput事件来达到同样的效果,真是太好了,我们只需要把IE浏览器区分出来就可以。

    oninput的使用

    下面我们先了解一下oninput如何使用。
    如果您是将注册时间直接写在页面里面,那么如下写法就可以实现:

  • <input type="text" name="textfield" oninput="alert(this.value);" onpropertychange="alert(this.value)" />
  • 复制代码

    但是,将oninput写在JS代码中分离出来时与普通事件注册的方法有些不同,必须使用addEventListener来注册。

        attachEvent和addEventListener 的不同

        说到这里我们再来了解一下 attachEvent和addEventListener 的使用方法:

    attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)
    addEventListener方法 用于 Mozilla系列

    举例:

  • document.getElementById("btn").onclick = method1;
  • document.getElementById("btn").onclick = method2;
  • document.getElementById("btn").onclick = method3;
  • 复制代码

    如果这样写,那么将会只有medhot3被执行


    写成这样:

  • var btn1Obj = document.getElementById("btn1");
  • btn1Obj.attachEvent("onclick",method1);
  • btn1Obj.attachEvent("onclick",method2);
  • btn1Obj.attachEvent("onclick",method3);
  • 复制代码


    执行顺序为method3->method2->method1


    如果是Mozilla系列,并不支持该方法,需要用到addEventListener

  • var btn1Obj = document.getElementById("btn1");
  • btn1Obj.addEventListener("click",method1,false);
  • btn1Obj.addEventListener("click",method2,false);
  • btn1Obj.addEventListener("click",method3,false);
  • 执行顺序为method1->method2->method3
  • 复制代码


    了解了如何使用addEventListener来注册oninput事件后我们再回到要解决的问题[划分浏览器]。

        判断IE浏览器

        如何将IE区分出来呢?
    这似乎是一个老生常谈的问题,网络中有很多找那个方法,归类为两类:
    其一,是判断浏览器的功能属性。
    其二,就是判断传统的 user-agent 字符串,这可能是最古老也是最流行的检测方式。
    在这里就不做深入了解了,我们这里用一种比较简单的方法来判断

  • if("\v"=="v") {
  •   alert("IE");
  • }else{
  •   alert("NO");
  • }
  • 复制代码

    到目前为止我们遇到的问题就已经解决了,开始写代码来测试我们的思路是否能够实现。

    完成代码:

    运行代码  复制代码  另存代码   提示:您可以先修改部分代码再运行


        太漂亮了,一次完成,预览以上代码,页面中共实现两两种方式:第一、页面中直接引用;第二、JS中引用。
    经过测试,兼容:IE6、IE7、IE8、Firefox、Opera、Chrome、Safari

        如有更好的解决办法或者其他什么问题可在评论中提出,欢迎批评。

        
    [3] UITextField滑动防止被键盘堵住 终极解决方案
        来源: 互联网  发布时间: 2014-02-18
    UITextField滑动防止被键盘挡住 终极

    问题:当屏幕下方有textfield时会被弹出的键盘挡住,用户体验不太好。

    坚决方法:使用scroll view 当textfield成为first responder时 将textfield滑动到键盘上面


    网上这方面的解决方法有很多,但是都不够完美,比如无法真确处理手持方向改变时keybord高度不一样的情况,无法兼容iPad下键盘和iPhone高度不一样,

    动画不和谐,实现过于复杂等等问题。 现在我分享的一个简单易懂又比较完美的方法。

    AutoScrollView类自动的实现了这一特性,要集成这个功能,只要在xib中将ScrolView的Customer class设置成AutoScrollView就可以了,非常简单容易。


    下面是AutoScrollView源代码

    //
    //  AutoScrollView.h
    //  AutoScrollView
    //
    //  Created by KindAzrael on 13-2-18.
    //  Copyright (c) 2013年 KindAzrael. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface AutoScrollView : UIScrollView
    
    @property(assign, nonatomic) CGPoint previousOffset;
    
    @end
    

    //
    //  AutoScrollView.m
    //  AutoScrollView
    //
    //  Created by KindAzrael on 13-2-18.
    //  Copyright (c) 2013年 KindAzrael. All rights reserved.
    //
    
    #import "AutoScrollView.h"
    
    @interface AutoScrollView ()
    
    // add the keybord notification 
    - (void)setup;
    
    // remove the keybord notification
    - (void)tearDown;
    
    
    - (void)keyboardWillShow:(NSNotification *)notification;
    
    
    - (void)keyboardWillHide:(NSNotification *)notification;
    
    @end
    
    @implementation AutoScrollView
    
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            [self setup];
        }
        
        return self;
    }
    
    - (void)awakeFromNib {
        [self setup];
        self.contentSize = CGSizeMake(320, 700);
    }
    
    - (void)dealloc {
        [self tearDown];
    }
    
    // hide keybord when touch croll view
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        [super touchesBegan:touches withEvent:event];
        [self endEditing:YES];
    }
    
    - (void)setup {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
    }
    
    - (void)tearDown {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    
    // scroll contentOffset when keybord will show 
    - (void)keyboardWillShow:(NSNotification *)notification {
        self.previousOffset = self.contentOffset;
        NSDictionary *userInfo = [notification userInfo];
        
        // get keyboard rect in windwo coordinate 
        CGRect keyboardRect = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
        
        // convert keyboard rect from window coordinate to scroll view coordinate
        keyboardRect = [self convertRect:keyboardRect fromView:nil];
        
        // get keybord anmation duration
        NSTimeInterval animationDuration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
        
        // get first responder textfield 
        UIView *currentResponder = [self findFirstResponderBeneathView:self];
        if (currentResponder != nil) {
            // convert textfield left bottom point to scroll view coordinate
            CGPoint point = [currentResponder convertPoint:CGPointMake(0, currentResponder.frame.size.height) toView:self];
            
            // 计算textfield左下角和键盘上面20像素 之间是不是差值
            float scrollY = point.y - (keyboardRect.origin.y - 20);
            if (scrollY > 0) {
                [UIView animateWithDuration:animationDuration animations:^{
                    //移动textfield到键盘上面20个像素
                    self.contentOffset = CGPointMake(self.contentOffset.x, self.contentOffset.y + scrollY);
                }];
            }
        }
        self.scrollEnabled = NO;
    }
    
    // roll back content offset
    -(void)keyboardWillHide:(NSNotification *)notification {
        NSDictionary *userInfo = [notification userInfo];
        NSTimeInterval animationDuration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
        [UIView animateWithDuration:animationDuration animations:^{
            self.contentOffset = self.previousOffset;
        }];
        self.scrollEnabled = YES;
    }
    
    - (UIView*)findFirstResponderBeneathView:(UIView*)view {
        // Search recursively for first responder
        for ( UIView *childView in view.subviews ) {
            if ( [childView respondsToSelector:@selector(isFirstResponder)] && [childView isFirstResponder] ) return childView;
            UIView *result = [self findFirstResponderBeneathView:childView];
            if ( result ) return result;
        }
        return nil;
    }
    @end


    效果



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