Я разрабатываю приложение для Android. В моем приложении я хочу отображать данные в диалоговом окне. По сути, я хочу отображать Activity в диалоговом окне при нажатии кнопки. Я знаю, как показать Activity как диалог. Вот как я сейчас показываю активность в виде диалога.

Я установил Activity в AndroidManifest вот так

<activity
    android:configChanges="orientation|screenSize"
    android:name=".MakeCommentActivity"
    android:label="Comment"
    android:theme="@android:style/Theme.Holo.Light.Dialog" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Итак, когда я открываю activity. Он отображается в виде диалогового окна, как показано ниже.

enter image description here

Как вы можете видеть на скриншоте, проблема с приведенным выше кодом заключается в том, что я не могу полностью контролировать дизайн. Я имею в виду, что я не могу установить цвет фона диалога, как хочу. Буду менять в зависимости от аппарата. Я не могу изменить тему диалога. Кроме того, я не могу удалить заголовок диалога и так далее.

enter image description here

Как и на скриншоте выше, я буду полностью контролировать дизайн. Я могу добавить иконку в заголовок. Я могу выбрать любую тему и так далее.

Так что я могу думать об использовании диалогового окна предупреждений с настраиваемым представлением. Но если я это сделаю, код не будет чистым и аккуратным, потому что вся логика и код будут помещены в родительскую активность. Не в другой деятельности.

Итак, мой вопрос: как я могу открыть диалоговое окно Activity как, которое можно полностью настроить в дизайне? Если не удается полностью настроить, использование диалогового окна предупреждений с настраиваемым представлением - хорошая идея? Потому что я буду показывать комментарии как в Facebook. Пользователь также может оставлять комментарии.

1
Wai Yan Hein 7 Сен 2016 в 09:35

5 ответов

Лучший ответ

Чаще всего эти, казалось бы, красивые диалоговые окна предупреждений вовсе не являются диалоговыми окнами предупреждений, а представляют собой действие с прозрачным фоном. Onclicklisteners размещены должным образом (например, щелчок по прозрачному фону закроет действие). Поэтому проектировать эти действия проще, чем настраивать диалоговое окно оповещения.

2
Sourav Kanta 7 Сен 2016 в 06:44

На самом деле вы всего лишь меняете тему своей деятельности. Лучший способ добиться желаемого - создать custom view Dialog:

//Here you inflate your design (xml layout)
View view = getLayoutInflater().inflate(R.layout.your_view, null);
//Here you can get any component of that layout (ex: textView)
TextView yourTextView = view.findViewById(R.id.your_textview_id);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(view);
    AlertDialog alert = builder.create();
    alert.show();

Таким образом, вы можете контролировать его, как хотите

3
cyborg86pl 6 Июн 2020 в 19:35

У меня был рабочий Activity с типом темы Dialog. Его легко настроить, и да, код становится чище, когда вы помещаете логин в другой класс.

Поэтому я хотел бы кое-что вам предложить. Первым делом нужно удалить intent-filter. На самом деле я не знаю, почему используется intent-filter, но в любом случае это не выглядит очень необходимым.

<activity
    android:configChanges="orientation|screenSize"
    android:name=".MakeCommentActivity"
    android:label="Comment"
    android:theme="@android:style/Theme.Holo.Light.Dialog" >
</activity>

Макет вашего Activity, который представляет собой диалог, очень важен. Вам необходимо установить layout_height и layout_width на match_parent, чтобы проверить, можете ли вы получить настраиваемое поведение.

Еще вы упомянули о ярлыке Activity, который можно легко изменить с помощью setTitle из функции onCreate вашего Activity.

Вот мой DialogActivity например

public class DialogActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);

        setTitle("My custom title");
    }
}

И используемый здесь макет

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="@android:color/white"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_margin="@dimen/activity_horizontal_margin"
        android:background="@android:color/black"
        android:layout_height="200dp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:background="@android:color/black" />

</LinearLayout>
1
Reaz Murshed 7 Сен 2016 в 07:23

Вы можете использовать AlertDialog, в основном Android AlertDialog можно использовать для отображения диалогового сообщения с кнопками OK и Cancel. Его можно использовать, чтобы прервать и спросить пользователя о его / ее выборе продолжить или прекратить.

Android AlertDialog состоит из трех областей: заголовок , область содержимого и кнопки действий . вы можете оставить кнопки действий, если они вам не нужны, как в вашем случае.

AlertDialog.Builder builder = new AlertDialog.Builder(this);  
//Setting message manually and performing action on button click 

        builder.setMessage("Do you want to close this application ?")  
            .setCancelable(false)  
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {  
                public void onClick(DialogInterface dialog, int id) {  
                finish();  
                }  
            })  
            .setNegativeButton("No", new DialogInterface.OnClickListener() {  
                public void onClick(DialogInterface dialog, int id) {  
                //  Action for 'NO' Button  
                dialog.cancel();  
             }  
            });  

       //Creating dialog box  
        AlertDialog alert = builder.create();  
        //Setting the title manually  
        alert.setTitle("AlertDialogExample");  
        alert.show();  

Это покажет вывод таким образом. введите описание изображения здесь

0
Zeeshan Afzal Satti 7 Сен 2016 в 06:46

Лучше использовать AlertDialog. Потому что если вы сделали это по теме, то для разных версий устройств его внешний вид будет меняться.

0
Nilesh 7 Сен 2016 в 06:55