Android让对话框全屏显示
Posted
技术标签:
【中文标题】Android让对话框全屏显示【英文标题】:Android make a dialog appear in fullscreen 【发布时间】:2013-08-21 08:10:57 【问题描述】:我需要对话框来填充屏幕,除了顶部和底部的一些空间。
我一直在寻找解决方案,但找不到可能是因为我在onClickListener
中声明了它。
谁能给个解决办法?
活动代码:
sort.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
// TODO Auto-generated method stub
AlertDialog.Builder sort = new AlertDialog.Builder(HomeScreen.this);
// Get the layout inflater
LayoutInflater inflater = HomeScreen.this.getLayoutInflater();
View sortView = inflater.inflate(R.layout.sort_layout, null);
sort.setView(sortView);
sort.create().show();
);
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:layout_marginBottom="50dp"
android:layout_marginTop="50dp"
android:background="@color/white"
android:orientation="vertical" android:layout_gravity="center">
+ some more stuff here I dont think it's relevant
</LinearLayout>
【问题讨论】:
请检查这个***.com/questions/1362723/… 已经尝试过 getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT) 但它什么也没做,它说它已被弃用。 你已经为那个做了一个自定义样式... 我会在哪里应用它? 【参考方案1】:这里设置你的屏幕宽度和对话框宽度
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = width;
lp.height = height;
dialog.getWindow().setAttributes(lp);
或者在你的样式中创建一个这样的样式
<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>
像这样创建一个对话框对象
dialog = new Dialog(this, R.style.DialogTheme);
编辑 ::
为它将填充的任何设备获取这样的宽度和高度..
WindowManager manager = (WindowManager) getSystemService(Activity.WINDOW_SERVICE);
int width, height;
LayoutParams params;
if (Build.VERSION.SDK_INT > VERSION_CODES.FROYO)
width = manager.getDefaultDisplay().getWidth();
height = manager.getDefaultDisplay().getHeight();
else
Point point = new Point();
manager.getDefaultDisplay().getSize(point);
width = point.x;
height = point.y;
【讨论】:
您的方法可行,但如何设置值以适应任何屏幕? 它正在工作,但我只是使用 manager.getDefaultDisplay().getWidth() 因为点需要更高的 API 级别,我正在为 2.2 开发 设置<item name="android:windowBackground">@null</item>
不会给你一个透明背景,但<item name="android:windowBackground">@android:color/transparent</item>
会。【参考方案2】:
首先在 style.xml 文件中为对话框自定义样式:
<style name="full_screen_dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
然后将此主题设置为您的警报对话框:
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.full_screen_dialog));
或者您可以调用新的 Activity 并将此自定义样式作为主题在您的清单文件中赋予该 Activity...
【讨论】:
windowIsFloating = true
在对话框中从开始到结束添加一个边距,如何解决?【参考方案3】:
这可能对某人有所帮助。 我想要一个对话框占据整个屏幕宽度。搜索了很多,但没有发现有用的。最后这对我有用:
mDialog.setContentView(R.layout.my_custom_dialog);
mDialog.getWindow().setBackgroundDrawable(null);
添加后,我的对话框出现在整个屏幕宽度。
【讨论】:
这段代码加上@kalyanpvs 的回答对我有用。【参考方案4】:试试这个
设置了 Theme.Dialog 样式的活动,执行以下操作:
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
【讨论】:
【参考方案5】:制作如下主题的对象
Dialog objD = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar);
【讨论】:
【参考方案6】: Dialog dialog2 = new Dialog(context, R.style.DialogTheme);
dialog2.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog2.getWindow().setBackgroundDrawable(null);
dialog2.setContentView(R.layout.dialog_img);
WindowManager.LayoutParams lp = dialog2.getWindow().getAttributes();
Window window = dialog2.getWindow();
lp.copyFrom(window.getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
window.setAttributes(lp);
lp.gravity = Gravity.CENTER;
final ImageView imgprofile=(ImageView)dialog2.findViewById(R.id.img_centre);
Picasso.with(context)
.load(arrayImages.get(position).get("image"))
.resize(800,1000)
.centerInside()
.into(imgprofile, new Callback()
@Override
public void onSuccess()
@Override
public void onError()
imgprofile.setImageResource(R.drawable.user);
);
dialog2.show();
然后在你的 dialog_img.xml 文件中添加一个带有 scaleType(fitXY) 的 Imageview。
【讨论】:
【参考方案7】:我觉得你应该试试这个:
在dialogFragment内:
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
【讨论】:
【参考方案8】:创建全屏对话框的最简单方法,创建如下样式:
<style name="DialogFullScreenTheme" parent="Theme.AppCompat.Light.DialogWhenLarge">
<item name="windowNoTitle">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
</style>
然后:
dialog = new Dialog(this, R.style.DialogFullScreenTheme);
【讨论】:
以上是关于Android让对话框全屏显示的主要内容,如果未能解决你的问题,请参考以下文章
Android开发 - 设置DialogFragment全屏显示
在我的情况下,几乎全屏显示对话框(使用 ActionBar 和覆盖)