タグ別アーカイブ: MADOSMA

MADOSMAと他のWindows Phone端末とでアプリのスケーリングを合わせる

さて、エミュレータ含め、普通のWindows Phone端末ではアプリ(Silverlightアプリ除く)のPageは横幅400として扱われます。ところがMADOSMAではこの値が600となっているため、文字や画像が小さく表示されるばかりか、アプリによっては全体が小さく縮んだ変なレイアウトになってしまうものもあります。

修正するとクイックアクションの設定可能数が5つから4つに減ってしまうなどもろもろの事情によりどうやらこのままで行くようで、ユーザ側では簡単操作の文字サイズ設定で小さい文字を大きく補整することもできるのですが、しかし文字以外のサイズは依然として小さいままとなります。

で、まあアプリの側で対応しちゃいましょうと登場するのがViewboxです。Viewboxは、そのContentを自身のサイズいっぱいまで拡大・縮小するコントロールで、単純にはViewbox直下にGridなりを置いてその横幅を400にしてしまえばMADOSMAとそれ以外とでスケーリングが揃うことになります。

それだけでも縦幅が十分に小さい場合はいいのですが、ここでViewboxの縦横比よりその中身の縦横比の方が縦の比率が大きくなってしまうと、縦幅を基準にスケーリングされるようになってしまうわけで、つまり縦幅が伸びるごとにどんどん小さくなっていってしまいます。解決するためには縦幅も指定してやれば良いのですが、画面の縦横比は端末によって異なるため縦幅は一様に定まりません。というわけで算出する必要があります。

自動調整してくれるコントロール

テンプレートコントロールとして作ってしまいましょう。新規作成でテンプレートコントロールを選んで……。

AdjustmentViewbox.cs
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace Sample01.Controls
{
    public sealed class AdjustmentViewbox : ContentControl
    {
        private static readonly double BaseLength = 400;
        public AdjustmentViewbox()
        {
            this.DefaultStyleKey = typeof(AdjustmentViewbox);
            this.SizeChanged += AdjustmentViewbox_SizeChanged;
        }

        private void AdjustmentViewbox_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            if (e.NewSize.Height > e.NewSize.Width)
            {
                // 縦長
                AdjustedWidth = BaseLength;
                AdjustedHeight = e.NewSize.Height * BaseLength / e.NewSize.Width;
            }
            else
            {
                // 横長
                AdjustedHeight = BaseLength;
                AdjustedWidth = e.NewSize.Width * BaseLength / e.NewSize.Height;
            }
        }

        public double AdjustedWidth
        {
            get
            {
                return (double)GetValue(AdjustedWidthProperty);
            }
            set
            {
                SetValue(AdjustedWidthProperty, value);
            }
        }
        public double AdjustedHeight
        {
            get
            {
                return (double)GetValue(AdjustedHeightProperty);
            }
            set
            {
                SetValue(AdjustedHeightProperty, value);
            }
        }

        public static readonly DependencyProperty AdjustedWidthProperty = DependencyProperty.Register("AdjustedWidth", typeof(double), typeof(AdjustmentViewbox), null);
        public static readonly DependencyProperty AdjustedHeightProperty = DependencyProperty.Register("AdjustedHeight", typeof(double), typeof(AdjustmentViewbox), null);
    }
}
Generic.xaml
<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Sample01.Controls">

    <Style TargetType="local:AdjustmentViewbox">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Viewbox>
                        <ContentPresenter
                            Width="{Binding AdjustedWidth, RelativeSource={RelativeSource Mode=TemplatedParent}}"
                            Height="{Binding AdjustedHeight, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
                    </Viewbox>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

で、作ったらあとは使うPageのContentをまるまる覆う形にしてやればよし。

エミュレータ(720p)での表示
エミュレータ(720p)
MADOSMA実機での表示
MADOSMA実機

これでもう文字が小さいなんて言われずに済みますね。

注意点

  • 計算誤差かわずかに隙間が生じることがある
  • Viewboxの外側、上部ステータスバーや下部アプリバーのサイズは小さいまま

MADOSMAを1日使ってみて

さて、本日は我が国に於ける4年ぶりのWindows Phone端末であるMADOSMAの発売日。

というわけで、思いがけず1日早くフライング宅配されてきた我がMADOSMAを今日1日使ってみた感想などをば。Archに参加しても良かったんだけどその日に届くだろう端末を早く触りたかったのと仕事が終わるか判らなかったので見送ったら前の日に届くし仕事はここのところ定時帰り。

なお、比較対象に出来るものがIS12Tしかないので感想には偏りのある可能性があります。

レグザフォンやARROWSで一世を風靡していた頃の富士通東芝が出してきたまさかの良機種。欠点は流行らなかったことと後継が出なかったことくらいか。
配達日指定なし。火曜に発送され、留め置かれることなくそのまま翌日水曜に到着。サンキューNTT-X Store。サンキュー佐川。

サイズ

5.0インチ。デカい。まあデカい。IS12Tが3.7インチなので面積で言えば1.8倍ほどにもなる。片手操作で親指だけを動かして届く範囲はせいぜい画面の2/3程度しかなくてなかなか厳しい。

が、それを差し置いてもこの一画面に収まる情報量はなるほど魅力的。3.7インチ、480×800とは世界が違うレベルだなぁと思う。

それでも本当は3.7~4.0インチくらいの端末が出てくれると良いんだけどね……あれだけ種類のあるAndroidですらこのサイズは希少種な今の時代では難しいか。3.5インチで十分と言っていたiPhoneも順調にでっかくなってしまったし。需要ありそうなんだけど。

動作

IS12T同様スペックの割にぬるぬる動く。まあこの辺りはIS12Tの例もありWPフリークな界隈の前評判もあり心配はしていなかったけど。

発熱

熱くない。IS12Tより穏やか。

まあ3Dのゲームをやるみたいなガッツリ熱くなりそうな使い方まだしてないんだけども。

スクリーンショット

IS12Tでは開発者アンロックしてーの野良アプリいれてーの撮りたい時に起動してーのでスクショ撮ってたけどOS標準機能として備わっているので電源ボタンと音量プラスボタンでさっと撮れる。

この端末はそれら2ボタンが反対の面に付いているから押しやすい撮りやすい。……撮りやすすぎてスリープさせたい時に誤爆することがままあるのが難点。まあ、これは慣れか。

中華フォント

やっぱりあっちゃうのよねこれ。サードパーティ製アプリはまあもうそういうのあるよねなんだけど、MSN系のアプリにもなぁ……。

あとHTMLメールで画像が表示されていない時の「画像のダウンロード」とか。

バッテリー

結構持つ。ここの最近のIS12Tよりも激しく使ってるけどまだバッテリーセーバーが作動する基準になってない。IS12T(1460mA+経年劣化)だともうgood byeなレベルだけど、まあ2300mAだし大画面の消費電力差し引いても十分行けるのな。

ちなみに今日のIS12T(そう、WP2台持ち)は電話・SMS専用機と化した結果80%の残容量である。
昨夜充電している時になんか回復遅いなーと思ってたんだけどそりゃあ容量的にIS12Tの1.5倍掛かってもしかたないわな。

これを書く余裕まである。

Twitterアプリ

とりあえず引き続いてKrile入れてはみたけどさすがに7.x用だし古いしもう更新もないしちょいちょい不具合も見られるので何か良いの探してみる。

見つからなければ作るかな……O-ruri for WPを。

地図

gMapsかMapFanあたりを入れようねぇ。

自作アプリ

まあ動く。動くけど7.x用(解像度480×800のみ)だから上下に空白出来るし画像もぼやける。

あとPhotocessorがカメラロールから起動出来なくなってて使い勝手悪化してる。やっぱ早急に8.1対応版を作らねば。何より自分が頻繁に使ってるアプリだしな。