觸力反饋hapticFeedbackEnabled屬性的用法!!!
阿新 • • 發佈:2019-01-08
- 摘要:為了實現單擊某個檢視,系統提供一個觸力反饋(震動一下),我們需要寫兩個地方: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?- <p>package hyz.com;</p><p>import android.content.Context;
- import android.util.AttributeSet;
- import android.widget.RelativeLayout;</p>publicclass ResizeLayout extends RelativeLayout {
- private OnResizeListener mListener;
- publicinterface OnResizeListener {
- void OnResize(int w, int h, int oldw, int oldh);
- }
- publicvoid setOnResizeListener(OnResizeListener l)
- {
- Log.i("ResizeLayout:setOnResizeListener");
- mListener = l;
- }
- public ResizeLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- Log.i("ResizeLayout:ResizeLayout");
- }
- @Override
- protectedvoid onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w, h, oldw, oldh);
- Log.i("ResizeLayout:onSizeChanged");
- if (mListener != null) {
- mListener.OnResize(w, h, oldw, oldh);
- }
- }
- }
- 二、引用自定義佈局
- <pre class="html" name="code"><hyz.com.ResizeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/resizeLayout"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- ......
- </hyz.com.ResizeLayout>
- 三、在mainfest裡的Activity新增
- android:windowSoftInputMode="adjustResize" 如: <activity android:name=".MyTabActivity"
- android:screenOrientation="portrait"
- android:windowSoftInputMode="adjustResize">
- 四、在Activity中設定該佈局的監聽事件
- 首先Acitivity實現自定義佈局裡面的OnResizeListener介面
- 然後設定監聽
- layout = (ResizeLayout) findViewById(R.id.resizeLayout);
- layout.setOnResizeListener(this);
- 接著複寫方法
- @Override
- publicvoid OnResize(int w, int h, int oldw, int oldh)
- {
- Log.i(h+":"+oldh);
- if (h >= oldh)
- {
- Log.i("CountdownActivity:OnResize()");
- handler.sendEmptyMessage(MSG_CLEAR);
- }
- }
- private Handler handler = new Handler()
- {
- publicvoid handleMessage(Message msg)
- {
- switch (msg.what)
- {
- case MSG_CLEAR:
- {
- clearFocus();
- break;
- }
- default:
- break;
- }
- super.handleMessage(msg);
- }
- };
- 上面的原理是,軟體盤隱藏,導致佈局大小變化,接著呼叫監聽器,然後傳送Message,最後在handler裡處理事件。
- 方法二:這個方法在4.0以上沒用,不過2.3可行,3.0的沒試過
- 由於軟體盤彈出,接著按返回鍵隱藏軟體盤。這個返回鍵監聽是被遮蔽了的,無法在onKeyDown()裡監聽返回鍵。
- 不過Acitivity裡有個方法dispatchKeyEvent()
- @Override
- publicboolean dispatchKeyEvent(KeyEvent event)
- {
- Log.i("CountdownActivity:dispatchKeyEvent()");
- if(event.getKeyCode() == KeyEvent.KEYCODE_BACK)
- {
- clearFocus();
- }
- returnsuper.dispatchKeyEvent(event);
- }