触力反馈hapticFeedbackEnabled属性的用法!!!

来源:互联网 发布:内地大尺度网络大电影 编辑:程序博客网 时间:2024/04/29 06:39
  • 摘要:为了实现单击某个视图,系统提供一个触力反馈(震动一下),我们需要写两个地方:1)在xml配置文件中,对要提供触力反馈的视图控件,设置其属性android:hapticFeedbackEnabled="true",这是必需的,只有在isHapticFeedbackEnabled()为真即android:hapticFeedbackEnabled="true"时,下面的方法performHapticFeedback(intfeedbackConstant,intflags)才会被执行2
  • 标签:触力反馈hapticFeedbackEnabled属性

为了实现单击某个视图,系统提供一个触力反馈(震动一下),我们需要写两个地方:

?

1)在xml配置文件中,对要提供触力反馈的视图控件,设置其属性android:hapticFeedbackEnabled="true",这是必需的,只有在?monospace; line-height: 1em;">isHapticFeedbackEnabled()为真即android:hapticFeedbackEnabled="true"时,下面的方法performHapticFeedback(int feedbackConstant, int flags)才会被执行

?

2)注册该视图的单击事件处理器,并在其中执行

?

public void onClick(View yourView) { yourView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS,HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);}


android:监听软件盘“返回”键显示隐藏事件

这里有2种处理方法,先看复杂的:

一、软件盘弹出隐藏时在mainfest里设置  android:windowSoftInputMode="adjustResize"会改变布局的大小,即onSizeChanged()方法会被调用。

我们如果要在软件盘隐藏时操作EditText里的内容,比如软件盘隐藏时使EditText失去焦点,可用如下2种方法。

方法一:

一、自定义布局

[java] view plaincopyprint?
  1. <p>package hyz.com;</p><p>import android.content.Context;  
  2. import android.util.AttributeSet;  
  3. import android.widget.RelativeLayout;</p>public class ResizeLayout extends RelativeLayout {  
  4.     private OnResizeListener mListener;   
  5.       
  6.     public interface OnResizeListener {   
  7.           
  8.         void OnResize(int w, int h, int oldw, int oldh);   
  9.     }   
  10.        
  11.     public void setOnResizeListener(OnResizeListener l)   
  12.     {   
  13.         Log.i("ResizeLayout:setOnResizeListener");  
  14.         mListener = l;   
  15.     }   
  16.        
  17.     public ResizeLayout(Context context, AttributeSet attrs) {   
  18.           
  19.         super(context, attrs);   
  20.         Log.i("ResizeLayout:ResizeLayout");  
  21.     }   
  22.        
  23.     @Override   
  24.     protected void onSizeChanged(int w, int h, int oldw, int oldh) {       
  25.         super.onSizeChanged(w, h, oldw, oldh);   
  26.         Log.i("ResizeLayout:onSizeChanged");  
  27.         if (mListener != null) {   
  28.             mListener.OnResize(w, h, oldw, oldh);   
  29.         }   
  30.     }   
  31. }   
[java] view plaincopyprint?
  1. 二、引用自定义布局  
[java] view plaincopyprint?
  1. <pre class="html" name="code"><hyz.com.ResizeLayout   
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/resizeLayout"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent">  
  6.     ......  
  7. </hyz.com.ResizeLayout>  
[java] view plaincopyprint?
  1. 三、在mainfest里的Activity添加  
[java] view plaincopyprint?
  1. android:windowSoftInputMode="adjustResize"                                                                                          如:                                                                                                                           <activity android:name=".MyTabActivity"              
  2.                   android:screenOrientation="portrait"  
  3.                   android:windowSoftInputMode="adjustResize">  
[java] view plaincopyprint?
  1. 四、在Activity中设置该布局的监听事件  
[java] view plaincopyprint?
  1. 首先Acitivity实现自定义布局里面的OnResizeListener接口  
[java] view plaincopyprint?
  1. 然后设置监听  
[java] view plaincopyprint?
  1. layout = (ResizeLayout) findViewById(R.id.resizeLayout);  
  2. layout.setOnResizeListener(this);   
[java] view plaincopyprint?
  1. 接着复写方法  
[java] view plaincopyprint?
  1.  @Override  
  2.  public void OnResize(int w, int h, int oldw, int oldh)   
  3.  {  
  4.   Log.i(h+":"+oldh);  
  5.   if (h >= oldh)   
  6.   {  
  7.    Log.i("CountdownActivity:OnResize()");  
  8.    handler.sendEmptyMessage(MSG_CLEAR);  
  9.   }    
  10.  }  
[java] view plaincopyprint?
  1. private Handler handler = new Handler()   
  2.      {  
  3.       public void handleMessage(Message msg)         
  4.       {  
  5.        switch (msg.what)   
  6.        {  
  7.         case MSG_CLEAR:  
  8.         {  
  9.          clearFocus();              
  10.          break;  
  11.         }  
  12.         default:  
  13.          break;  
  14.    }  
  15.    super.handleMessage(msg);  
  16.   }  
  17.  };  
[java] view plaincopyprint?
  1. 上面的原理是,软件盘隐藏,导致布局大小变化,接着调用监听器,然后发送Message,最后在handler里处理事件。  
[java] view plaincopyprint?
  1.    
[java] view plaincopyprint?
  1.    
[java] view plaincopyprint?
  1. 方法二:这个方法在4.0以上没用,不过2.3可行,3.0的没试过  
[java] view plaincopyprint?
  1.    
[java] view plaincopyprint?
  1. 由于软件盘弹出,接着按返回键隐藏软件盘。这个返回键监听是被屏蔽了的,无法在onKeyDown()里监听返回键。  
[java] view plaincopyprint?
  1. 不过Acitivity里有个方法dispatchKeyEvent()  
[java] view plaincopyprint?
  1. @Override  
  2.  public boolean dispatchKeyEvent(KeyEvent event)   
  3.  {  
  4.   Log.i("CountdownActivity:dispatchKeyEvent()");  
  5.   if(event.getKeyCode() == KeyEvent.KEYCODE_BACK)  
  6.   {  
  7.    clearFocus();  
  8.   }  
  9.   return super.dispatchKeyEvent(event);  
  10.  } 

原创粉丝点击