18

@android:style/Theme.Holo.DialogIce Cream Sandwichの Holo Dialog テーマ ( ) を使用したアクティビティで、ちょっと奇妙な問題に遭遇しました。

XML レイアウトのレイアウトの幅と高さではなく、レイアウトを無視して画面全体を埋めているようです。Honeycomb では同じレイアウトが期待どおりに機能しますが、Ice Cream Sandwich では機能しません。

例:

正しい道 (ハニカム) ここに画像の説明を入力

間違った方法 (アイス クリーム サンドイッチ) ここに画像の説明を入力

どちらのデバイスもまったく同じバージョンのアプリケーションを実行しており、まったく同じレイアウトを使用しています。問題のレイアウトは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="940dp"
    android:layout_height="600dp"
    android:layout_margin="10dp" >

    <GridView
        android:id="@+id/gridView1"
        android:layout_width="940dp"
        android:layout_height="600dp"
        android:horizontalSpacing="10dp"
        android:numColumns="3"
        android:smoothScrollbar="true"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dp" >
    </GridView>

</LinearLayout>

これをどのように解決できるかについてのアイデアはありますか? match_parent高さと幅のタグを完全に無視する私の ICS ベースの Galaxy Nexus でも同様の問題が発生します。ダイアログのテーマは ICS で壊れていますか?

アップデート:

さらにテストを行ったところ、894 dp 以下の幅で「正しい」外観が生成されるようですが、幅を 895 dp 以上に設定すると、正しくない外観になります。エミュレーターも同じように動作します。これは非常に奇妙です...

ここに画像の説明を入力

4

4 に答える 4

6

ICS が対話を思いとどまらせるというのは本当ではないと思います。実際、彼らはAndroid Design にページ全体を持っています。実際のところ、DialogFragment ( Android サポート ライブラリでも提供されています) は、従来のDialogよりも優先されます。

ダイアログが全画面表示になるというあなたの観察を裏付けますが、動作はデバイスに依存します。Xoom タブレットでは、895 ではなく 915 dp で発生します。Galaxy Nexus では、444 dp で発生します。私のGalaxy Tab 10.1では、まったく起こりません。

ソースを掘り下げるとHolo、小さな画面Holo.Dialog.FixedSize用と大きな画面用の Dialog テーマが継承されていることがわかります。これはレイアウト サイズではなく、ディスプレイ サイズに基づいていると予想していましたが、おそらく間違っているでしょう。ジャンプの原因を突き止めてみます。

于 2012-04-04T12:12:01.873 に答える
1

自分で答えが見つからなかったので、最終的にダイアログテーマを削除し、代わりに全幅の標準テーマレイアウトを使用しました。ICSはダイアログの使用を推奨していないと思うので、おそらくそれが変更された理由です。

于 2012-02-11T17:27:51.757 に答える