「Xamarin.MacでDockアイコンを非表示にする」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
13行目: 13行目:
 
info.plistでドックアイコンを非表示にする方法では常に非表示になってしまい使いにくい場面も多い。
 
info.plistでドックアイコンを非表示にする方法では常に非表示になってしまい使いにくい場面も多い。
 
[[ソースコード]]で動的に制御できると捗る。
 
[[ソースコード]]で動的に制御できると捗る。
この例ではAppDelegateのDidFinishLaunchingメソッドでドックアイコンを消しているがこれに限らず、たとえばNSApplicationのインスタンスを生成しているMainメソッドでいきなり叩いても動くようだ。
+
 
 +
NSApplicationインスタンスのActivationPolicyプロパティに、「Accessory」または「Prohibited」を設定するとドックアイコンが非表示になり、「Regular」を設定するとドックアイコンが表示になる。
 
<source lang="csharp">
 
<source lang="csharp">
 
     public partial class AppDelegate : NSApplicationDelegate
 
     public partial class AppDelegate : NSApplicationDelegate
21行目: 22行目:
 
         public override void DidFinishLaunching(NSNotification notification)
 
         public override void DidFinishLaunching(NSNotification notification)
 
         {
 
         {
            // NSApplicationのActivationPolicyプロパティに
 
            // AccessoryまたはProhibitedを設定するとドックアイコンが非表示になり、
 
            // Regularを設定するとドックアイコンが表示になる。
 
 
             var app = NSApplication.SharedApplication;
 
             var app = NSApplication.SharedApplication;
 
             app.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
 
             app.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
 +
        }
 +
    }
 +
</source>
 +
 +
上記の例ではAppDelegateのDidFinishLaunchingメソッドでドックアイコンを消しているがこれに限らず、たとえばNSApplicationのインスタンスを生成しているMainメソッドでいきなり叩いても動くようだ。
 +
<source lang="csharp">
 +
    static class MainClass
 +
    {
 +
        static void Main(string[] args)
 +
        {
 +
            NSApplication.Init();
 +
 +
            var application = NSApplication.SharedApplication;
 +
            application.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
 +
            application.Delegate = new AppDelegate();
 +
            application.Run();
 
         }
 
         }
 
     }
 
     }

2015年5月25日 (月) 04:54時点における版

Mac OS XシステムステータスバーWindowsでいうタスクトレイ)にアイコンを表示する、いわゆる常駐アプリケーションではドックWindowsでいうタスクバー)のアイコンは非表示にしたい。

実装1

プリファレンスファイルで設定する[1]

  1. info.plistファイルを開く
  2. 下部にあるタブで「ソース」を選ぶ
  3. Add new entryをクリックして以下の一行をする
    • プロパティに「LSUIElement」(Application is agentと表示される)
    • 型に「Boolean」
    • 値に「Yes」

実装2: 動的に制御する

info.plistでドックアイコンを非表示にする方法では常に非表示になってしまい使いにくい場面も多い。 ソースコードで動的に制御できると捗る。

NSApplicationインスタンスのActivationPolicyプロパティに、「Accessory」または「Prohibited」を設定するとドックアイコンが非表示になり、「Regular」を設定するとドックアイコンが表示になる。

    public partial class AppDelegate : NSApplicationDelegate
    {
        // 〜〜〜中略〜〜〜

        public override void DidFinishLaunching(NSNotification notification)
        {
            var app = NSApplication.SharedApplication;
            app.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
        }
    }

上記の例ではAppDelegateのDidFinishLaunchingメソッドでドックアイコンを消しているがこれに限らず、たとえばNSApplicationのインスタンスを生成しているMainメソッドでいきなり叩いても動くようだ。

    static class MainClass
    {
        static void Main(string[] args)
        {
            NSApplication.Init();

            var application = NSApplication.SharedApplication;
            application.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
            application.Delegate = new AppDelegate();
            application.Run();
        }
    }

その他

Xamarin.MacではHIServices.frameworkが使えないのでソースコードレベルで動的に制御することはできない[2]

関連項目

参考文献