我最初的目标是模态对话框,但是你知道,Android不支持这种类型的对话框。或者,建立以对话为主题的活动可能会奏效 这是代码,
public class DialogActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(android.R.style.Theme_Dialog);
super.onCreate(savedInstanceState);
requestWindowFeature (Window.FEATURE_NO_TITLE);
Button yesBtn = new Button(this);
yesBtn.setText("Yes");
yesBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
DialogActivity.this.finish();
}
});
this.setContentView(yesBtn);
}
然而,背景总是黑色的,这真的令人困惑。人们有同样的问题,
http://code.google.com/p/android/issues/detail?id=4394
我只想让它看起来更像对话用户。那么,如何让这个DialogActivity透明,永远不会覆盖底层屏幕?
感谢。
这就是我创建风格的方式
<style name="CustomDialogTheme" parent="android:Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">false</item>
</style>
答案 0 :(得分:22)
您可以通过此方式创建透明对话框。
public class DialogActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle(" ");
alertDialog.setMessage("");
alertDialog.setIcon(R.drawable.icon);
alertDialog.setButton("Accept", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
alertDialog.setButton2("Deny", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
alertDialog.show();
}
}
在此之后只需在AndroidManifest.xml中添加一行,您可以在其中定义清单中的活动。
android:theme="@android:style/Theme.Translucent.NoTitleBar"
答案 1 :(得分:13)
我找到的最简单的方法是将AndroidManifest中的活动主题设置为android:theme="@android:style/Theme.Holo.Dialog"
,然后在活动的onCreate方法调用中getWindow().setBackgroundDrawable(new ColorDrawable(0));
答案 2 :(得分:5)
在这里添加所有答案只需要一件事。 要实现像行为一样的完整对话框,可以通过更改窗口布局参数来重新定位对话框:
WindowManager.LayoutParams params = getWindow().getAttributes();
params.x = ...;
params.y = ...;
params.width = ...;
params.height = ...;
this.getWindow().setAttributes(params);
我们使用类似的技术在Tooleap SDK中实现浮动活动效果:
答案 3 :(得分:3)
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
和import android.graphics.drawable.ColorDrawable; on top :)
答案 4 :(得分:3)
关于@ user824330答案的快速更新。既然你有AlertDialog.Builder类,为什么不正确使用它呢?现在已弃用许多方法。最新的代码与此类似:
public class DialogActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("title")
.setMessage("message")
.setIcon(R.drawable.ic_launcher)
.setPositiveButton("Yes", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {}
})
.setNegativeButton("No", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {}
});
final AlertDialog dialog = builder.create();
dialog.show();
}
}
答案 5 :(得分:0)
建立DialogFragment并使用setcontentview自定义对话框可能会更好。
http://developer.android.com/reference/android/app/DialogFragment.html