【问题标题】:How to play default button's sound on Xamarin.Android?如何在 Xamarin.Android 上播放默认按钮的声音?
【发布时间】:2016-07-05 02:15:28
【问题描述】:

我正在使用 Xamarin.forms 制作应用程序。 如果您尝试过,您可能知道表单的按钮不足以用作图像按钮。

所以我使用图像作为按钮并添加手势识别器。它工作正常。 好消息是我可以像使用 Image 一样使用所有 Image 的可绑定属性。 (如“方面属性”等)

唯一的问题是Android按钮在按下时有声音效果。 我的没有。

如何在 Android 上播放默认按钮声音?

[再试一次]

我尝试进行布局并在其上放置图像和空虚拟按钮。 但是如果我这样做,除非我手动链接它,否则我不能使用 Image 或 Button 的任何属性。

所以我认为这不是正确的方法。

谢谢。

【问题讨论】:

    标签: xamarin xamarin.android xamarin.forms


    【解决方案1】:

    Xamarin.Android:

    var root = FindViewById<View>(Android.Resource.Id.Content);
    root.PlaySoundEffect(SoundEffects.Click);
    

    Android playSoundEffect(int soundConstant)

    Xamarin.iOS

    UIDevice.CurrentDevice.PlayInputClick();
    

    Xamarin.Forms 通过Dependency Service:

    public interface ISound
    {
        void KeyboardClick () ;
    }
    

    然后实现平台特定的功能。

    iOS:

    public void KeyboardClick()
    {
        UIDevice.CurrentDevice.PlayInputClick();
    }
    

    安卓:

    public View root;
    public void KeyboardClick()
    {
        if (root == null)
        {
            root = FindViewById<View>(Android.Resource.Id.Content);
        }
        root.PlaySoundEffect(SoundEffects.Click);
    }
    

    【讨论】:

    • 非常感谢@SushiHangover 这几乎是正确的答案。我不得不稍微改变一下。 root = CrossCurrentActivity.Current.Activity.FindViewById(Android.Resource.Id.Content)
    • 因为不在Activity上,所以无法使用FindViewById。所以我访问了当前的活动。
    • FindViewById 方法从何而来?
    • @Mort 一个活动实例
    【解决方案2】:

    看看以下内容:

    MonoTouch.UIKit.IUIInputViewAudioFeedback

    UIInputViewAudioFeedback_Extensions 类一起构成UIInputViewAudioFeedback 协议的接口。 另见:IUIInputViewAudioFeedback

    https://developer.xamarin.com/api/type/MonoTouch.UIKit.IUIInputViewAudioFeedback/

    你会想要这样的东西(未经测试):

    public void SomeButtonFunction()
    {
        SomeBtn.TouchUpInside += (s, e) => { 
            UIDevice.CurrentDevice.PlayInputClick();
        };
    }
    

    【讨论】:

      【解决方案3】:

      Xamarin 表单

      PCL 接口:

      interface ISoundService { void Click(); }
      

      点击处理程序:

      void Handle_OnClick(object sender, EventArgs e) {
          DependencyService.Get<ISoundService>().Click();
      }
      

      安卓:

      public class MainActivity {
          static MainActivity Instance { get; private set; }
          OnCreate() {
              Instance = this;
          }
      }
      
      class SoundService : ISoundService {
          public void Click() {
              var activity = MainActivity.Instance;
              var view = activity.FindViewById<View>(
                  Android.Resource.Id.Content);
              view.PlaySoundEffect(SoundEffects.Click);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-08
        • 1970-01-01
        • 2013-08-29
        • 1970-01-01
        • 2012-09-08
        • 2014-11-02
        • 2015-05-01
        相关资源
        最近更新 更多