Jak zmienić motyw dla AlertDialog

242

Zastanawiałem się, czy ktoś może mi pomóc. Próbuję utworzyć niestandardowy AlertDialog. Aby to zrobić, dodałem następujący wiersz kodu w styles.xml

<resources>
 <style name="CustomAlertDialog" parent="android:Theme.Dialog.Alert">
  <item name="android:windowBackground">@drawable/color_panel_background</item>
 </style>
</resources>
  • color_panel_background.9.png znajduje się w folderze do rysowania. Jest to również dostępne w folderze res zestawu SDK systemu Android.

Poniżej znajduje się główna aktywność.

package com.customdialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;

public class CustomDialog extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        this.setTheme(R.style.CustomAlertDialog);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("HELLO!");
        builder .setCancelable(false)
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               //MyActivity.this.finish();
           }
       })
       .setNegativeButton("No", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               //dialog.cancel();
           }
       });

        AlertDialog alertdialog = builder.create();
        alertdialog.show();
    }
}

Aby zastosować motyw do AlertDialog, musiałem ustawić motyw w bieżącym kontekście.

Jednak po prostu nie wydaje mi się, aby aplikacja wyświetlała dostosowany AlertDialog. Czy ktoś może mi przy tym pomóc?

Min Soo Kim
źródło
Uważam, że to repo na github jest bardzo pomocne: github.com/StylingAndroid/AlertDialog
esilver

Odpowiedzi:

363

W Dialog.java (Android src) używany jest ContextThemeWrapper. Możesz więc skopiować pomysł i zrobić coś takiego:

AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom));

A potem stylizuj go tak, jak chcesz:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AlertDialogCustom" parent="@android:style/Theme.Dialog">
        <item name="android:textColor">#00FF00</item>
        <item name="android:typeface">monospace</item>
        <item name="android:textSize">10sp</item>
    </style>
</resources>
Arve Waltin
źródło
62
Nie używaj @android: style / AlertDialog. Nie ma go w publicznym interfejsie API. W konsekwencji w Androidzie 2.3.3 ulega awarii podczas tworzenia konstruktora.
Catalin Morosan
18
@kaciula jest @android:style/Theme.Dialogpubliczny? Czy zamiast tego można go użyć?
HRJ
24
Tak. To jest publiczne. Sprawdź developer.android.com/reference/android/R.style.html, aby uzyskać listę wszystkich stylów publicznych. Pamiętaj, że nazewnictwo w interfejsie API jest inne niż w kodzie. Zamiast „.” Występuje „_”. (Theme_Dialog)
Catalin Morosan
2
Gdzie mam umieścić powyższy plik XML?
Chaitanya Chandurkar,
3
W przypadku nowszego motywu, który jest częścią motywów kompatybilności, sugeruję użycie Theme.AppCompat.Light.Dialog.Alertstylu jako elementu nadrzędnego w twoim niestandardowym stylu. Ale jeśli to zrobisz, upewnij się, że importujesz, import android.support.v7.app.AlertDialog; a nieimport android.app.AlertDialog
w3bshark
93

Miałem ten AlertDialogproblem związany z tematem przy użyciu SDK 1.6, jak opisano tutaj: http://markmail.org/message/mj5ut56irkrkc4nr

Rozwiązałem problem, wykonując następujące czynności:

  new AlertDialog.Builder(
  new ContextThemeWrapper(context, android.R.style.Theme_Dialog))

Mam nadzieję że to pomoże.

ser
źródło
2
Istnieje kilka odpowiednich tematów; w moim przypadku lepiej pasowało android.R.style.Theme_Holo_Dialog. Świetna wskazówka.
Johnny O
78

W swoim blogu napisałem artykuł na temat konfigurowania układu AlertDialog z plikami w stylu XML. Głównym problemem jest to, że potrzebujesz różnych definicji stylów dla różnych parametrów układu. Oto podstawa oparta na stylu AlertDialog z Holo Light Platform wersja 19 dla pliku stylu, który powinien obejmować wiele standardowych aspektów układu, takich jak rozmiary tekstu i kolory tła.

<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
    ...
    <item name="android:alertDialogTheme">@style/MyAlertDialogTheme</item>
    <item name="android:alertDialogStyle">@style/MyAlertDialogStyle</item>
    ...
</style>

<style name="MyBorderlessButton">
    <!-- Set background drawable and text size of the buttons here -->
    <item name="android:background">...</item>
    <item name="android:textSize">...</item>
</style>

<style name="MyButtonBar">
    <!-- Define a background for the button bar and a divider between the buttons here -->
    <item name="android:divider">....</item>
    <item name="android:dividerPadding">...</item>
    <item name="android:showDividers">...</item>
    <item name="android:background">...</item>
</style>

<style name="MyAlertDialogTitle">
    <item name="android:maxLines">1</item>
    <item name="android:scrollHorizontally">true</item>
</style>

<style name="MyAlertTextAppearance">
    <!-- Set text size and color of title and message here -->
    <item name="android:textSize"> ... </item>
    <item name="android:textColor">...</item>
</style>

<style name="MyAlertDialogTheme">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowTitleStyle">@style/MyAlertDialogTitle</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:textAppearanceMedium">@style/MyAlertTextAppearance</item>
    <!-- If you don't want your own button bar style use
            @android:style/Holo.Light.ButtonBar.AlertDialog
            and
            ?android:attr/borderlessButtonStyle
         instead of @style/MyButtonBar and @style/MyBorderlessButton -->
    <item name="android:buttonBarStyle">@style/MyButtonBar</item>
    <item name="android:buttonBarButtonStyle">@style/MyBorderlessButton</item>
</style>

<style name="MyAlertDialogStyle">
    <!-- Define background colors of title, message, buttons, etc. here -->
    <item name="android:fullDark">...</item>
    <item name="android:topDark">...</item>
    <item name="android:centerDark">...</item>
    <item name="android:bottomDark">...</item>
    <item name="android:fullBright">...</item>
    <item name="android:topBright">...</item>
    <item name="android:centerBright">...</item>
    <item name="android:bottomBright">...</item>
    <item name="android:bottomMedium">...</item>
    <item name="android:centerMedium">...</item>
</style>
Nantoka
źródło
2
czy mogę zapytać, dlaczego potrzebujemy stylu i motywu do dostosowania AlertDialog? Wielkie dzięki! @nantoka
brainvision
2
@brainvision Mój wpis na blogu zawiera szczegóły, ale w skrócie układ AlertDialog pochodzi z dwóch różnych klas (Dialog i AlertController), które używają różnych plików parametrów układu.
Nantoka
46
 <style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">@color/colorAccent</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">@color/teal</item>
</style>





new AlertDialog.Builder(new ContextThemeWrapper(context,R.style.AlertDialogCustom))
            .setMessage(Html.fromHtml(Msg))
            .setPositiveButton(posBtn, okListener)
            .setNegativeButton(negBtn, null)
            .create()
            .show();
Sai Gopi N.
źródło
3
Najbardziej uproszczone, ale szybkie rozwiązanie!
FonzTech,
4
OK, a może użyjesz jakiegoś atrybutu, aby zadeklarować go globalnie w „AppTheme”?
deadfish,
2
Pomogło mi to zmienić kolory przycisków okna dialogowego.
icarovirtual
1
Dzięki, stary, uratowałeś mi tydzień!
Clifton Steenkamp
31

Walczyłem z tym - możesz stylizować tło okna dialogowego za pomocą android:alertDialogStyle="@style/AlertDialog"swojego motywu, ale ignoruje ono wszelkie ustawienia tekstu, które masz. Jak wspomniano powyżej @rflexor, nie można tego zrobić z SDK przed Honeycomb (dobrze, że można użyć Reflection).

Moim rozwiązaniem, w skrócie, było stylizowanie tła okna dialogowego za pomocą powyższego, a następnie ustawienie niestandardowego widoku tytułu i zawartości (przy użyciu układów, które są takie same jak w zestawie SDK).

Moje opakowanie:

import com.mypackage.R;

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomAlertDialogBuilder extends AlertDialog.Builder {

    private final Context mContext;
    private TextView mTitle;
    private ImageView mIcon;
    private TextView mMessage;

    public CustomAlertDialogBuilder(Context context) {
        super(context);
        mContext = context; 

        View customTitle = View.inflate(mContext, R.layout.alert_dialog_title, null);
        mTitle = (TextView) customTitle.findViewById(R.id.alertTitle);
        mIcon = (ImageView) customTitle.findViewById(R.id.icon);
        setCustomTitle(customTitle);

        View customMessage = View.inflate(mContext, R.layout.alert_dialog_message, null);
        mMessage = (TextView) customMessage.findViewById(R.id.message);
        setView(customMessage);
    }

    @Override
    public CustomAlertDialogBuilder setTitle(int textResId) {
        mTitle.setText(textResId);
        return this;
    }
    @Override
    public CustomAlertDialogBuilder setTitle(CharSequence text) {
        mTitle.setText(text);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setMessage(int textResId) {
        mMessage.setText(textResId);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setMessage(CharSequence text) {
        mMessage.setText(text);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setIcon(int drawableResId) {
        mIcon.setImageResource(drawableResId);
        return this;
    }

    @Override
    public CustomAlertDialogBuilder setIcon(Drawable icon) {
        mIcon.setImageDrawable(icon);
        return this;
    }

}

alert_dialog_title.xml (pobrany z SDK)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
    <LinearLayout
            android:id="@+id/title_template"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:layout_marginTop="6dip"
            android:layout_marginBottom="9dip"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip">

            <ImageView android:id="@+id/icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="top"
                android:paddingTop="6dip"
                android:paddingRight="10dip"
                android:src="@drawable/ic_dialog_alert" />
            <TextView android:id="@+id/alertTitle"
                style="@style/?android:attr/textAppearanceLarge"
                android:singleLine="true"
                android:ellipsize="end"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
        <ImageView android:id="@+id/titleDivider"
            android:layout_width="fill_parent"
            android:layout_height="1dip"
            android:scaleType="fitXY"
            android:gravity="fill_horizontal"
            android:src="@drawable/divider_horizontal_bright" />
</LinearLayout>

alert_dialog_message.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/scrollView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingTop="2dip"
            android:paddingBottom="12dip"
            android:paddingLeft="14dip"
            android:paddingRight="10dip">
    <TextView android:id="@+id/message"
                style="?android:attr/textAppearanceMedium"
                android:textColor="@color/dark_grey"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="5dip" />
</ScrollView>

Następnie po prostu użyj CustomAlertDialogBuilderzamiast, AlertDialog.Builderaby utworzyć okna dialogowe i po prostu zadzwoń setTitlei setMessagejak zwykle.

Joseph Earl
źródło
3
jak uzyskałeś dostęp do android.R.internal.id.alerttitle?
Gilbert
2
Nie zrobiłem tego, wszedłem do R.id.alertTitle
Joseph Earl
28

Możesz bezpośrednio przypisać motyw podczas inicjowania Konstruktora:

AlertDialog.Builder builder = new AlertDialog.Builder(
                    getActivity(), R.style.MyAlertDialogTheme);

Następnie dostosuj swój motyw w swoim values/styles.xml

<!-- Alert Dialog -->
<style name="MyAlertDialogTheme" parent="Theme.AppCompat.Dialog.Alert">
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:colorBackground">@color/alertDialogBackground</item>
    <item name="android:windowBackground">@color/alertDialogBackground</item>
</style>
pha
źródło
1
Idealny. Jedyne, czego użyłemTheme.AppCompat.Light.Dialog.Alert
ekashking
11

W przypadku niestandardowego okna dialogowego:

wystarczy wywołać super(context,R.style.<dialog style>)zamiast super(context)w konstruktorze dialogowym

public class MyDialog extends Dialog
{
    public MyDialog(Context context)
    {
       super(context, R.style.Theme_AppCompat_Light_Dialog_Alert)
    }
}


W przypadku AlertDialog:

Wystarczy utworzyć alertDialog za pomocą tego konstruktora:

 new AlertDialog.Builder(
 new ContextThemeWrapper(context, android.R.style.Theme_Dialog))
Amir Hossein Ghasemi
źródło
1
Nie ma potrzeby rozszerzania okna dialogowego o nową pustą klasę, ponieważ już istnieje wersja konstruktora, która przyjmuje styl motywu.
FindOut_Quran
@FindOut_Quran Chodzi o to, aby pokazać, jak zastąpić styl w niestandardowej klasie Dialog. To tylko przykład, twoja prawdziwa klasa Dialog będzie również zawierała inny kod.
Niall
8

Chyba nie da się tego zrobić. Przynajmniej nie z Konstruktorem. Pracuję z wersją 1.6, a implementacja w Builder.create () to:

public AlertDialog create() {
    final AlertDialog dialog = new AlertDialog(P.mContext);
    P.apply(dialog.mAlert);
    [...]
}

który wywołuje konstruktora AlertDialog „nieświadomego tematu”, który wygląda następująco:

protected AlertDialog(Context context) {
    this(context, com.android.internal.R.style.Theme_Dialog_Alert);
}

W AlertDialog istnieje drugi konstruktor do zmiany motywów:

protected AlertDialog(Context context, int theme) {
    super(context, theme);
    [...]
}

którego Konstruktor po prostu nie dzwoni.

Jeśli i tak okno dialogowe jest dość ogólne, spróbowałbym napisać podklasę AlertDialog, wywołując drugi konstruktor i użyć tej klasy zamiast mechanizmu konstruktora.

rflexor
źródło
4

Lepszym sposobem na to jest skorzystanie z niestandardowego okna dialogowego i dostosowanie go do własnych potrzeb. Przykład niestandardowego okna dialogowego .....

wprowadź opis zdjęcia tutaj

public class CustomDialogUI {
Dialog dialog;
Vibrator vib;
RelativeLayout rl;

@SuppressWarnings("static-access")
public void dialog(final Context context, String title, String message,
        final Runnable task) {
    dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.custom);
    dialog.setCancelable(false);
    TextView m = (TextView) dialog.findViewById(R.id.message);
    TextView t = (TextView) dialog.findViewById(R.id.title);
    final Button n = (Button) dialog.findViewById(R.id.button2);
    final Button p = (Button) dialog.findViewById(R.id.next_button);
    rl = (RelativeLayout) dialog.findViewById(R.id.rlmain);
    t.setText(bold(title));
    m.setText(message);
    dialog.show();
    n.setText(bold("Close"));
    p.setText(bold("Ok"));
    // color(context,rl);
    vib = (Vibrator) context.getSystemService(context.VIBRATOR_SERVICE);
    n.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            vib.vibrate(15);
            dialog.dismiss();
        }
    });
    p.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            vib.vibrate(20);
            dialog.dismiss();
            task.run();
        }
    });
}
 //customize text style bold italic....
public SpannableString bold(String s) {
    SpannableString spanString = new SpannableString(s);
    spanString.setSpan(new StyleSpan(Typeface.BOLD), 0,
            spanString.length(), 0);
    spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
    // spanString.setSpan(new StyleSpan(Typeface.ITALIC), 0,
    // spanString.length(), 0);
    return spanString;
}

}

Oto układ XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
>

<RelativeLayout
    android:id="@+id/rlmain"
    android:layout_width="fill_parent"
    android:layout_height="150dip"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:background="#569CE3" >

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="25dip"
        android:layout_marginTop="10dip" >

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="Are you Sure?"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ffffff"
            android:textSize="13dip" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/relativeLayout2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/relativeLayout1"
        android:layout_alignRight="@+id/relativeLayout1"
        android:layout_below="@+id/relativeLayout1"
        android:layout_marginTop="5dip" >
    </RelativeLayout>

    <ProgressBar
        android:id="@+id/process"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="3dip"
        android:layout_marginTop="3dip" />

    <RelativeLayout
        android:id="@+id/relativeLayout3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/relativeLayout2"
        android:layout_below="@+id/relativeLayout2"
        android:layout_toLeftOf="@+id/process" >

        <TextView
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="Medium Text"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#ffffff"
            android:textSize="13dip"/>

    </RelativeLayout>

    <Button
        android:id="@+id/next_button"
        android:layout_width="90dip"
        android:layout_height="35dip"
        android:layout_alignParentBottom="true"
        android:textColor="@drawable/button_text_color"
         android:background="@drawable/blue_button"
         android:layout_marginBottom="5dp"
           android:textSize="10dp"

        android:layout_alignRight="@+id/relativeLayout3"
        android:text="Okay" />

    <Button
        android:id="@+id/button2"
        android:text="Cancel"
        android:textColor="@drawable/button_text_color"
        android:layout_width="90dip"
        android:layout_height="35dip"
        android:layout_marginBottom="5dp"
         android:background="@drawable/blue_button"
         android:layout_marginRight="7dp"
        android:textSize="10dp"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@+id/next_button"
         />

</RelativeLayout>


źródło
7
Tworzenie i używanie widoku niestandardowego to 2 różne rzeczy i mają różne cele.
jmc34,
3

Każdy, kto próbuje to zrobić we fragmencie (używając biblioteki wsparcia, tj. Wcześniejszego API 11), powinien to zrobić:

public class LoadingDialogFragment extends DialogFragment {
    public static final String ID = "loadingDialog";

    public static LoadingDialogFragment newInstance() {
        LoadingDialogFragment f = new LoadingDialogFragment();

        return f;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        StyleAlertDialog adb = new StyleAlertDialog(getActivity(), R.style.Your_Style);
        adb.setView(getActivity().getLayoutInflater().inflate(R.layout.fragment_dialog_layout, null));
        return adb;
    }

    private class StyleAlertDialog extends AlertDialog {
        protected StyleAlertDialog(Context context, int theme) {
            super(context, theme);
        }
    }
}

@ Rflexor skłonił mnie do rozszerzenia AlertDialog i ujawnienia podziękowań dla konstruktora

Blundell
źródło
Konstruktor AlertDialog.Builder(Context, int)działa tylko na interfejsie API 11 i nowszych. Twój kod ulega awarii we wcześniejszych wersjach Androida.
Joseph Earl
@JosephEarl (przy użyciu biblioteki obsługi, tj. Przed API 11)
Blundell,
Mój zło, używasz konstruktora okien dialogowych, a nie konstruktora okien dialogowych.
Joseph Earl
2

Rozwiązanie Arve Waltin wygląda dobrze, chociaż jeszcze go nie przetestowałem. Jest inne rozwiązanie w przypadku, gdy mają problemy z poruszaniem, że do pracy .... Extend AlertDialog.Builderi zastępują wszystkie metody (np. setText, setTitle,setView Itp), aby nie ustawić rzeczywisty dialogowym Text / Tytuł / widok, ale, aby utworzyć nowy widok w Widok okna dialogowego robi tam wszystko. Następnie możesz dowolnie stylizować wszystko.

Dla wyjaśnienia, jeśli chodzi o klasę nadrzędną, widok jest ustawiony i nic więcej.

Jeśli chodzi o niestandardową klasę rozszerzoną, wszystko odbywa się w tym widoku.

Steven L.
źródło
0

Nie jestem pewien, jak rozwiązanie Arve działałoby w niestandardowym oknie dialogowym z konstruktorem, w którym widok jest zawyżany przez LayoutInflator.

Rozwiązaniem powinno być wstawienie ContextThemeWrapper do inflatora poprzez cloneInContext():

View sensorView = LayoutInflater.from(context).cloneInContext(
     new ContextThemeWrapper(context, R.style.AppTheme_DialogLight)
).inflate(R.layout.dialog_fingerprint, null);
6rchid
źródło
-1

Można to zrobić po prostu za pomocą setView () Buildera. Możesz utworzyć dowolny widok do wyboru i wprowadzić go do konstruktora. To działa dobrze. Używam niestandardowego TextView renderowanego przez narzędzie do tworzenia okien dialogowych. Nie ustawiam wiadomości, a ta przestrzeń jest wykorzystywana do renderowania mojego widoku tekstowego klienta.

AKh
źródło
-12
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
builder.setMessage("Description");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();
Sanchit Panchwatikar
źródło
Czy chcesz sformatować kod za pomocą wbudowanego fragmentu kodu?
Adriano,