3

私は常にタイトルなしでカスタム ダイアログを作成しandroid:windowNoTitle、 instyles.xmlまたはを使用して中央揃え (垂直方向と水平方向の両方) にしrequestWindowFeature(Window.FEATURE_NO_TITLE)ますが、一部のダイアログは水平方向の中央にありません。たとえば、次のダイアログです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"    
android:padding="20dp"
android:gravity="center"
android:background="@drawable/dialog_bg" >

<include 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    layout="@layout/loading_s"/>

<TextView
    android:id="@+id/message"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp"
    android:gravity="center_vertical"
    android:text="@string/loading"
    android:textColor="@color/dialog_text"
    android:textSize="@dimen/dialog_title_text_size" />

</LinearLayout>

ダイアログの作成方法は次のとおりです。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
    View v = LayoutInflater.from(getActivity()).inflate(R.layout.dlg_progress, null);
    Dialog dlg = new Dialog(getActivity(), R.style.My_Dialog_Style); //My_Dialog_Style contains android:windowNoTitle = true
    dlg.setContentView(v);
    dlg.setCanceledOnTouchOutside(false);   
    dlg.setCancelable(true);
    return dlg;
}

そして、これが画面に表示される方法です

ここに画像の説明を入力

属性を削除android:windowNoTitleすると、このダイアログが正しく表示されるため、タイトルのないダイアログを使用した場合にのみ問題が発生します。

なぜこれが起こるのか、そしてダイアログを常に画面の中央に配置する方法を知っている人はいますか?

4

4 に答える 4

2

このスレ見てみた?

Androidでカスタムダイアログセンターを揃えるには?

 android:layout_gravity="center" 

単なるレイアウトの変更のように見えるか、FrameLayout の代わりに relativeLayout または LinearLayout を使用してみてください

于 2013-07-19T17:56:03.883 に答える
1

ダイアログの最小幅属性を下回っていると思います。それは次のように見つけることができます

<item type="dimen" name="dialog_min_width_major">65%</item>

Android のフレームワークで。どのvaluesフォルダを見ているかによって変わるので、密度や向きなどによって異なります。

この値をスタイルで上書きできる場合があります。ダイアログよりも確実に小さい値 (10%) に設定すると、正しく動作する可能性があります。そうでない場合は、読み進めてください。

ビュー ツリー パネルで気付くと、LinearLayout が 3 つの FrameLayout 内にネストされていることがわかります。私の推測では、最も深い FrameLayout の幅は に設定されてwrap_contentいるため、親レイアウトを埋めておらず、LinearLayout と同じ大きさしかありません。ただし、写真では寸法が切り落とされているため、確認できません。

タイトルを削除すると、なぜ変更されるのですか? 知らない。のパディング/レイアウトパラメーターを調整することでハックできますがonMeasure、それを行うためのよりクリーンな方法があるはずです。

于 2013-07-19T20:02:35.360 に答える
0

Dialogタイトルを削除しても水平方向に中央揃えにならない理由はまだわかりませんが、 = ダイアログmin_widthの属性を設定すると、この問題はなくなりました。LinearLayoutminWidth

于 2013-07-24T08:47:09.400 に答える