Android 如何使我的对话全屏显示?

Android 如何使我的对话全屏显示?,android,dialog,Android,Dialog,我有一个Dialog类,在其中的某个地方被实例化以显示webview。正如您在下面的代码中看到的,它不是全屏的。我尝试了很多改变,但在最好的情况下,它仍然不是全屏模式。怎么办 public class MyDialog extends Dialog { static final float[] DIMENSIONS_LANDSCAPE = { 460, 260 }; static final float[] DIMENSIONS_PORTRAIT = { 280, 420 }; static

我有一个Dialog类,在其中的某个地方被实例化以显示webview。正如您在下面的代码中看到的,它不是全屏的。我尝试了很多改变,但在最好的情况下,它仍然不是全屏模式。怎么办

public class MyDialog extends Dialog {

static final float[] DIMENSIONS_LANDSCAPE = { 460, 260 };
static final float[] DIMENSIONS_PORTRAIT = { 280, 420 };
static final FrameLayout.LayoutParams FILL = new FrameLayout.LayoutParams(
        ViewGroup.LayoutParams.FILL_PARENT,
        ViewGroup.LayoutParams.FILL_PARENT);
static final int MARGIN = 4;
static final int PADDING = 2;

private String mUrl;
private OAuthDialogListener mListener;
private ProgressDialog mSpinner;
private WebView mWebView;
private LinearLayout mContent;
private TextView mTitle;

private static final String TAG = "My-WebView";

public MyDialog(Context context, String url,
        OAuthDialogListener listener) {
    super(context);

    mUrl = url;
    mListener = listener;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mSpinner = new ProgressDialog(getContext());
    mSpinner.requestWindowFeature(Window.FEATURE_NO_TITLE);
    mSpinner.setMessage("Loading...");
    mContent = new LinearLayout(getContext());
    mContent.setOrientation(LinearLayout.VERTICAL);
    setUpTitle();
    setUpWebView();

    Display display = getWindow().getWindowManager().getDefaultDisplay();
    final float scale = getContext().getResources().getDisplayMetrics().density;
    float[] dimensions = (display.getWidth() < display.getHeight()) ? DIMENSIONS_PORTRAIT
            : DIMENSIONS_LANDSCAPE;

    addContentView(mContent, new FrameLayout.LayoutParams(
            (int) (dimensions[0] * scale + 0.5f), (int) (dimensions[1]
                    * scale + 0.5f)));
    CookieSyncManager.createInstance(getContext());
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.removeAllCookie();
}

private void setUpTitle() {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    mTitle = new TextView(getContext());
    mTitle.setText("My Site");
    mTitle.setTextColor(Color.WHITE);
    mTitle.setTypeface(Typeface.DEFAULT_BOLD);
    mTitle.setBackgroundColor(Color.BLACK);
    mTitle.setPadding(MARGIN + PADDING, MARGIN, MARGIN, MARGIN);
    mContent.addView(mTitle);
}

private void setUpWebView() {
    mWebView = new WebView(getContext());
    mWebView.setVerticalScrollBarEnabled(false);
    mWebView.setHorizontalScrollBarEnabled(false);
    mWebView.setWebViewClient(new OAuthWebViewClient());
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl(mUrl);
    mWebView.setLayoutParams(FILL);
    mContent.addView(mWebView);
}

private class OAuthWebViewClient extends WebViewClient {
//some code
}

public interface OAuthDialogListener {
    public abstract void onComplete(String accessToken);
    public abstract void onError(String error);
}
MyDialog在另一个类中实例化并启动,如下所示:

 class A {
 //some code
 MyDialog mDialog = new MyDialog(context, mAuthUrl, listener);
 mDialog.show();
 }
试试这个:

MyDialog mDialog =new MyDialog (this,android.R.style.Theme_Black_NoTitleBar_Fullscreen);
mDialog.show();
试试这个:

MyDialog mDialog =new MyDialog (this,android.R.style.Theme_Black_NoTitleBar_Fullscreen);
mDialog.show();

尝试改用dialogFragment。在它中使用以下代码

public class myDialog extends DialogFragment {

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, R.style.NewDialog);
}
并将values/styles.xml中的样式声明为

<style name="NewDialog" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowFullscreen">false</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:background">@android:color/transparent</item>
</style>

@空的
@android:彩色/透明
假的
@空的
假的
@空的
@android:style/Animation.Dialog
假的
@android:彩色/透明

希望这有帮助

尝试改用dialogFragment。在它中使用以下代码

public class myDialog extends DialogFragment {

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, R.style.NewDialog);
}
并将values/styles.xml中的样式声明为

<style name="NewDialog" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowFullscreen">false</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:background">@android:color/transparent</item>
</style>

@空的
@android:彩色/透明
假的
@空的
假的
@空的
@android:style/Animation.Dialog
假的
@android:彩色/透明
希望这有帮助

试试这个

Java类

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = width;
lp.height = height;
dialog.getWindow().setAttributes(lp);
Style.xml

<style name="DialogTheme" parent="android:Theme.Dialog">

    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">fill_parent</item>


    <!-- No backgrounds, titles or window float -->
    <item name="android:windowBackground">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

填补家长的空缺
填补家长的空缺
@空的
真的
假的
试试这个

Java类

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = width;
lp.height = height;
dialog.getWindow().setAttributes(lp);
Style.xml

<style name="DialogTheme" parent="android:Theme.Dialog">

    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">fill_parent</item>


    <!-- No backgrounds, titles or window float -->
    <item name="android:windowBackground">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

填补家长的空缺
填补家长的空缺
@空的
真的
假的

如您所见,MyDialog类有自己的构造函数,我无法更改它。请尝试此mDialog.getWindow().setLayout(LayoutParams.FILL\u父级,LayoutParams.MATCH\u父级);我已经做完了。该更改使mWebviw为空,只保留mtitle!为什么要设置舱单?它不在舱单上。然而,上述答案解决了问题。无论如何,谢谢。正如您所看到的,MyDialog类有自己的构造函数,我无法更改它。请尝试此mDialog.getWindow().setLayout(LayoutParams.FILL\u父级,LayoutParams.MATCH\u父级);我已经做完了。该更改使mWebviw为空,只保留mtitle!为什么要设置舱单?它不在舱单上。然而,上述答案解决了问题。不管怎样,谢谢。好吧,构造器仍然阻止我这么做。这有点复杂,因为构造函数中使用了一些监听器和其他东西,无法更改。您仍然可以使用构造函数和监听器,只需将对话框更改为dialogFragment而不是dialog。任何阻止您执行此操作的特定侦听器?执行此操作后,eclipse将未定义以下部分:Display Display=getWindow().getWindowManager().getDefaultDisplay();addContentView(mContent,新的FrameLayout.LayoutParams((int)(尺寸[0]*比例+0.5f),(int)(尺寸[1]*比例+0.5f));requestWindowFeature(窗口。功能\u无\u标题);类格式不允许我进行更改。在这种情况下,我必须更改整个类代码。尝试一下,将其作为对话框保存,并在其构造函数中执行以下操作:public MyDialog(上下文上下文,字符串url,OAuthDialogListener){super(上下文,R.style.NewDialog);mUrl=url;mListener=listener;}希望这能很好地解决您的问题,但构造函数仍然阻止我这样做。这有点复杂,因为构造函数中使用了一些监听器和其他东西,无法更改。您仍然可以使用构造函数和监听器,只需将对话框更改为dialogFragment而不是dialog。任何阻止您执行此操作的特定侦听器?执行此操作后,eclipse将未定义以下部分:Display Display=getWindow().getWindowManager().getDefaultDisplay();addContentView(mContent,新的FrameLayout.LayoutParams((int)(尺寸[0]*比例+0.5f),(int)(尺寸[1]*比例+0.5f));requestWindowFeature(窗口。功能\u无\u标题);类格式不允许我进行更改。在这种情况下,我必须更改整个类代码。尝试一下,将其作为对话框保存,并在其构造函数中执行以下操作:public MyDialog(上下文上下文,字符串url,OAuthDialogListener){super(上下文,R.style.NewDialog);mUrl=url;mListener=listener;}希望这能解决您的问题