AlertDialog: jak usunąć czarne obramowania powyżej i poniżej widoku
To pytanie zostało już zadane: AlertDialog custom title has black border
Ale nie odpowiedział zadowalająco - i brakuje pewnych informacji.
Próbuję utworzyć niestandardowe okno dialogowe w Androidzie bez tytułu i bez żadnych przycisków na dole.
Jednak powstałe okno dialogowe ma czarne "obramowania" / "odstępy" / coś wzdłuż górnej i dolnej części widoku.
From the Documentation :
Okno dialogowe wykonane z podstawowej klasy dialogowej musi mieć tytuł. Jeśli nie wywołaj setTitle (), wtedy przestrzeń użyta dla tytułu pozostaje pusty, ale wciąż widoczny. Jeśli w ogóle nie chcesz tytułu, to należy utworzyć własne okno dialogowe przy użyciu klasy AlertDialog. Jednakże, ponieważ AlertDialog jest tworzony najłatwiej z AlertDialog.Budowniczy klasy, nie masz dostępu do użytej metody setContentView (int) powyżej. Zamiast tego musisz użyć setView (Widok). Ta metoda akceptuje Widok obiekt, więc musisz napompować Główny obiekt widoku układu z XML.
Więc tak zrobiłem:
Witam.java
public class Welcome extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome);
LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.welcomedialog, (ViewGroup)findViewById(R.id.layout_root));
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
builder.create().show();
}
}
/ align = "left" / xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/texturebg"
android:id="@+id/layout_root"
android:orientation="vertical"
android:padding="40px">
...
</LinearLayout>
Uwaga: próbowałem użyć FrameLayout
jako root ViewGroup
zamiast LinearLayout
zgodnie z sugestią, którą gdzieś znalazłem - ale to nie pomogło.
Wynik
SetBackgroundDrawable Suggestion
public class Welcome extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome);
LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.welcomedialog, (ViewGroup)findViewById(R.id.layout_root));
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
AlertDialog dialog = builder.create();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
dialog.show();
}
}
Nie zadziałało na mnie. 5 answers
Jeśli spojrzysz na źródło klasy AlertDialog zobaczysz, że większość metod to po prostu metody proxy (fasada) wokół private AlertController mAlert
.
Patrząc na źródło klasy AlertController zobaczysz 4 interesujące zmienne członkowskie:
private int mViewSpacingLeft;
private int mViewSpacingTop;
private int mViewSpacingRight;
private int mViewSpacingBottom;
private boolean mViewSpacingSpecified = false;
Ustawienie mViewSpacingSpecified
na true
spowoduje usunięcie obramowania na górze i na dole okna dialogowego.
Jest to zrobione poprawnie przez zmianę tej linii:
dialog.setView(layout);
Do:
dialog.setView(layout, 0, 0, 0, 0);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-06 08:09:00
dialog.setInverseBackgroundForced(true);
Użyj powyższego kodu, aby usunąć obramowanie okna dialogowego alertu.
Zobacz ten LINK dla InverseBackgroundForced.
Zaktualizowano wypróbuj ten kod::::
public class Welcome extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome);
AlertDialog.Builder builder = new AlertDialog.Builder(Welcome.this);
LayoutInflater _inflater = LayoutInflater.from(Welcome.this);
View view = _inflater.inflate(R.layout.welcomedialog,null);
builder.setView(view);
AlertDialog alert = builder.create();
alert.show();
}
}
Uwaga:: Spróbuj również usunąć android: padding= "40px" z welcomedialog.xml.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-12 03:27:01
W moim przypadku ta granica była spowodowana motywem aktywności rodzica dla AlertDialog. Aby całkowicie pozbyć się granicy, nadaj jej inny temat (w tym przypadku Holo):
AlertDialog.Builder builder = new AlertDialog.Builder(
new ContextThemeWrapper(this, android.R.style.Theme_Holo)
);
To mi to naprawiło. Mam nadzieję, że to pomoże!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-24 22:28:36
Żeby odpowiedź Steve ' a była bardziej jasna, można to łatwo zrobić. Na przykład w moim przypadku widok, który ustawiałem w oknie dialogowym, był widokiem sieciowym.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
WebView webView = new WebView(getActivity());
webView.loadUrl(" url to show ");
OnClickListener clickListenerOk = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
...
}
};
OnClickListener clickListenerCancel = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
...
}
};
AlertDialog dialog = new AlertDialog.Builder(getActivity())
.setPositiveButton("OK", clickListenerOk)
.setNegativeButton("Cancel",clickListenerCancel)
.create();
dialog.setView(webView, 0, 0, 0, 0);
return dialog;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-23 07:54:49
setBackgroundDrawable(new ColorDrawable(0));
Zadzwoń do tego w oknie dialogowym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-03 14:48:09