ダイアログテーマが設定されたアクティビティを使用していますが、フルスクリーンにしたいです。 WindowManagerを介してウィンドウを手動で最大の幅と高さに拡張することも含め、あらゆる種類のことを試しましたが、何も機能しません。
どうやら、ダイアログウィンドウ(またはダイアログテーマのアクティビティ)は、その内容に応じてのみ拡大しますが、それでも常に機能するとは限りません。たとえば、幅と高さをFILL_PARENTに設定した進行状況バーの円を表示します(レイアウトコンテナーも同様)が、それでもダイアログは画面いっぱいに表示されるのではなく、はるかに小さい進行状況バーを折り返します。
ダイアログウィンドウ内に小さなものを表示する方法が必要ですが、コンテンツのサイズを変更せずにフルスクリーンサイズに拡大する必要がありますか?
私は解決策を見つけました:
Theme.Dialog
スタイルが設定されているアクティビティで、次の操作を行います。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
Window.setLayout()
を呼び出すことが重要ですaftersetContentView()
を呼び出すと、機能しなくなります。
この値をスタイルAndroid:windowMinWidthMajorおよびAndroid:windowMinWidthMinorに追加できます
<style name="Theme_Dialog" parent="Android:Theme.Holo.Dialog">
...
<item name="Android:windowMinWidthMajor">97%</item>
<item name="Android:windowMinWidthMinor">97%</item>
</style>
私は以下のようにしたために画面の80%のみを埋めたいだけです
DisplayMetrics metrics = getResources().getDisplayMetrics();
int screenWidth = (int) (metrics.widthPixels * 0.80);
setContentView(R.layout.mylayout);
getWindow().setLayout(screenWidth, LayoutParams.WRAP_CONTENT); //set below the setContentview
getContent()。setLayout ...行をsetContentView(..)の下に配置した場合にのみ機能します
ありがとう@Matthias
dialog_custom_layout.xmlを他のレイアウトの代わりにRelativeLayoutにラップします。
ダイアログ用これは誰かに役立つかもしれません。ダイアログが画面の幅いっぱいに表示されるようにします。たくさん検索しましたが、有用なものはありませんでした。最後に、これは私のために働いた:
mDialog.setContentView(R.layout.my_custom_dialog);
mDialog.getWindow().setBackgroundDrawable(null);
これを追加すると、ダイアログが画面全体に表示されます。
この答えは回避策です「Theme.AppCompat.Dialog」または他の「Theme.AppCompat.Dialog」の子孫を使用する場合「Theme.AppCompat.Light.Dialog」、「Theme.AppCompat。」 DayNight.Dialog」など。私はAppCompatActivityをすべてのアクティビティの拡張として使用するため、私自身はAppCompatダイアログを使用する必要があります。受け入れられた回答を使用すると、ダイアログのすべての側面(上、右、下、左)にパディングが発生するという問題が発生します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
アクティビティのスタイルで、これらのコードを追加します
<style name="DialogActivityTheme" parent="Theme.AppCompat.Dialog">
<item name="windowNoTitle">true</item>
<item name="Android:windowBackground">@null</item>
</style>
お気づきかもしれませんが、ダイアログのパディングを生成する問題は「Android:windowBackground」なので、ここではウィンドウの背景をnullにします。
Matthiasの答えはほとんど正しいですが、各サイドに小さなパディングがあるため(@Holmesが指摘)、画面全体に表示されません。彼のコードに加えて、Theme.Dialogスタイルを拡張し、このような属性を追加することでこれを修正できます。
<style name="MyDialog" parent="@Android:style/Theme.Dialog">
<item name="Android:windowBackground">@Android:color/transparent</item>
<item name="Android:windowNoTitle">true</item>
</style>
次に、テーマをMyDialog
に設定してActivityを宣言します。
<activity
Android:name=".FooActivity"
Android:theme="@style/MyDialog" />
最上部のレイアウトで最小幅を設定します。
Android:minWidth="300dp"
例えば:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout Android:orientation="vertical" Android:layout_width="fill_parent" Android:layout_height="fill_parent"
xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:minWidth="300dp">
<!-- Put remaining contents here -->
</LinearLayout>
これは私のような人に役立つでしょう。カスタムダイアログスタイルを作成します。
<style name="MyDialog" parent="Theme.AppCompat.Light.Dialog">
<item name="windowNoTitle">true</item>
<item name="Android:windowFullscreen">true</item>
<item name="Android:windowIsFloating">false</item>
</style>
AndroidManifest.xml
ファイルで、必要なアクティビティのテーマを設定します。
<activity
Android:name=".CustomDialog"
...
Android:theme="@style/MyDialog"/>
それがすべてであり、メソッドをプログラムで呼び出す必要はありません。
アクティビティが定義されているマニフェストファイル内
<activity
Android:name=".YourPopUpActivity"
Android:theme="@Android:style/Theme.Holo.Dialog" >
</activity>
アクションバーなし
<activity Android:name=".YourPopUpActivity"
Android:theme="@Android:style/Theme.Holo.Dialog.NoActionBar"/>