前言
- 如果系统设置[声音]选项中关闭了[触摸提示音],则所有的View都没有提示音。
- 开启系统设置[触摸提示音]基础上,View或ViewGroup设置setOnTouchListener()或者setOnLongClickListener()都是没有提示音的。
- 开启系统设置[触摸提示音]基础上,View或ViewGroup只有设置setOnClickListener()监听,默认情况下(android:soundEffectsEnabled默认是为true的)时是由提示音的。
- 在2的前提下,修改View或ViewGroup的android:soundEffectsEnabled属性为false,就没有提示音。
小结一下
如果需要View或ViewGroup点击时有提示音,需要如下三步。
- 需要开启触摸提示音
- android:soundEffectsEnabled属性为true
- 需要设置setOnClickListener()监听
提示音开启和设置
需要开启触摸提示音
开启这个有两种,一种就是系统设置[声音],然后开启[触摸提示音]。
另外一种时通过代码设置。
# 查询是是否有提示音 int enabled = Settings.System.getInt(getContentResolver(), Settings.System.SOUND_EFFECTS_ENABLED);
/设置 0-关闭,1-打开 Settings.System.putInt(getContentResolver(), Settings.System.SOUND_EFFECTS_ENABLED, 0);
开启View或ViewGroup
设置或者不设置也行,默认都是置为true的,重点就是设置setOnClickListener()监听。
<TextView android:id="@+id/main_test_one" android:layout_width="match_parent" android:layout_height="200dp" android:soundEffectsEnabled="true" android:background="@android:color/holo_red_dark" />
设置监听后,就有按键提示音了。
但是,如果你的View或ViewGroup中的android:soundEffectsEnabled=”false”那就没有提示音。
findViewById(R.id.main_test_one).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } });
音效是在AudioManager播放的
播放代码: framework/base/media/java/android/media/AudioManager.java
public void playSoundEffect(int effectType) { if (effectType < 0 || effectType >= NUM_SOUND_EFFECTS) { return; } if (!querySoundEffectsEnabled()) { return; } IAudioService service = getService(); try { service.playSoundEffect(effectType); } catch (RemoteException e) { Log.e(TAG, "Dead object in playSoundEffect"+e); } }
参考文章
© 版权声明