1. 程式人生 > >觸力反饋hapticFeedbackEnabled屬性的用法!!!

觸力反饋hapticFeedbackEnabled屬性的用法!!!

  • 摘要:為了實現單擊某個檢視,系統提供一個觸力反饋(震動一下),我們需要寫兩個地方:1)在xml配置檔案中,對要提供觸力反饋的檢視控制元件,設定其屬性android:hapticFeedbackEnabled="true",這是必需的,只有在isHapticFeedbackEnabled()為真即android:hapticFeedbackEnabled="true"時,下面的方法performHapticFeedback(intfeedbackConstant,intflags)才會被執行2

為了實現單擊某個檢視,系統提供一個觸力反饋(震動一下),我們需要寫兩個地方:

?

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);
}

這裡有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>publicclass ResizeLayout extends RelativeLayout {  
  4.     private OnResizeListener mListener;   
  5.     publicinterface OnResizeListener {   
  6.         void OnResize(int w, int h, int oldw, int oldh);   
  7.     }   
  8.     publicvoid setOnResizeListener(OnResizeListener l)   
  9.     {   
  10.         Log.i("ResizeLayout:setOnResizeListener");  
  11.         mListener = l;   
  12.     }   
  13.     public ResizeLayout(Context context, AttributeSet attrs) {   
  14.         super(context, attrs);   
  15.         Log.i("ResizeLayout:ResizeLayout");  
  16.     }   
  17.     @Override
  18.     protectedvoid onSizeChanged(int w, int h, int oldw, int oldh) {       
  19.         super.onSizeChanged(w, h, oldw, oldh);   
  20.         Log.i("ResizeLayout:onSizeChanged");  
  21.         if (mListener != null) {   
  22.             mListener.OnResize(w, h, oldw, oldh);   
  23.         }   
  24.     }   
  25. }   
[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.  publicvoid 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.       publicvoid 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? [java] view plaincopyprint? [java] view plaincopyprint?
  1. 方法二:這個方法在4.0以上沒用,不過2.3可行,3.0的沒試過  
[java] view plaincopyprint? [java] view plaincopyprint?
  1. 由於軟體盤彈出,接著按返回鍵隱藏軟體盤。這個返回鍵監聽是被遮蔽了的,無法在onKeyDown()裡監聽返回鍵。  
[java] view plaincopyprint?
  1. 不過Acitivity裡有個方法dispatchKeyEvent()  
[java] view plaincopyprint?
  1. @Override
  2.  publicboolean dispatchKeyEvent(KeyEvent event)   
  3.  {  
  4.   Log.i("CountdownActivity:dispatchKeyEvent()");  
  5.   if(event.getKeyCode() == KeyEvent.KEYCODE_BACK)  
  6.   {  
  7.    clearFocus();  
  8.   }  
  9.   returnsuper.dispatchKeyEvent(event);  
  10.  }