Android: как создать прозрачную диалоговую деятельность
Моя первоначальная цель - модальный диалог, но вы знаете, что 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>
Ответы
Ответ 1
Вы можете создать прозрачный диалог.
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"
Ответ 2
Самый простой способ, который я нашел, - установить тему активности в AndroidManifest на android:theme="@android:style/Theme.Holo.Dialog"
, а затем в вызове метода onCreate getWindow().setBackgroundDrawable(new ColorDrawable(0));
Ответ 3
Только одно, чтобы добавить сюда все ответы.
Чтобы добиться полного диалога, такого как поведение, вы можете изменить положение диалогового окна, изменив параметры макета окна:
WindowManager.LayoutParams params = getWindow().getAttributes();
params.x = ...;
params.y = ...;
params.width = ...;
params.height = ...;
this.getWindow().setAttributes(params);
Мы использовали подобный метод для достижения эффекта плавающей активности в SDK Tooleap:
![floating calculator]()
Ответ 4
Просто быстрое обновление на @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
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
и import android.graphics.drawable.ColorDrawable; on top :)
Ответ 6
Возможно, вам лучше создать диалог DialogFragment и настроить диалог с помощью setcontentview.
http://developer.android.com/reference/android/app/DialogFragment.html