文章

Android取消和开启View或则ViewGroup点击带有提示音

文章目录

前言

  1. 如果系统设置[声音]选项中关闭了[触摸提示音],则所有的View都没有提示音。
  2. 开启系统设置[触摸提示音]基础上,View或ViewGroup设置setOnTouchListener()或者setOnLongClickListener()都是没有提示音的。
  3. 开启系统设置[触摸提示音]基础上,View或ViewGroup只有设置setOnClickListener()监听,默认情况下(android:soundEffectsEnabled默认是为true的)时是由提示音的。
  4. 在2的前提下,修改View或ViewGroup的android:soundEffectsEnabled属性为false,就没有提示音。
小结一下

如果需要View或ViewGroup点击时有提示音,需要如下三步。

  1. 需要开启触摸提示音
  2. android:soundEffectsEnabled属性为true
  3. 需要设置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);
    }
}

参考文章

  1. Android sound effects设置
0 0
发表评论