Делаю приложение с математическими и логическими квестами. На каждом уровне у пользователя будет возможность использовать подсказку, то есть метод решения и ответ появятся на экране. Вопрос заключается в том, как лучше реализовать это появление на экране? Можно просто создать новое активити с ответом, которое будет появлятся по нажатию кнопки, но, как по мне, выглядит это не особо эстетично. Есть ли другие способы? Например, чтобы всплывало окно с ответом вместо нового активити? И как это реализовать?
Вообще, это базовые знания, которые нужно учить вместе с программированием на Андроид) Конкретно для вашей задачи лучше подойдёт окно диалога (созданное через фрагмент). Можно использовать PopupWindow.
Вот код DialogFragment:
import android.support.v4.app.DialogFragment;
public class DialogCustom extends DialogFragment {
public static final String TYPE = "type";
public static final String ANSWER = "answer";
public static final int HINT = 0;
public static DialogCustom newInstance(int type, String answer) {
Bundle args = new Bundle();
args.putInt(TYPE, type);
args.putString(ANSWER, answer);
DialogCustom fragment = new DialogCustom();
fragment.setArguments(args);
return fragment;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
switch (getArguments().getInt(TYPE)) {
case HINT:
return hint();
}
return super.onCreateDialog(savedInstanceState);
}
private Dialog hint() {
AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
View v = LayoutInflater.from(getActivity()).inflate(R.layout.my_dialog, null, false);
((TextView)v.findViewById(R.id.text))
.setText(getArguments().getString(ANSWER));
v.findViewById(R.id.text).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
adb.setView(v);
Dialog dialog = adb.create();
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
return dialog;
}
layout my_dialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:id="@+id/text"
android:gravity="center"
android:layout_height="wrap_content"/>
<ImageView
android:layout_width="match_parent"
android:id="@+id/img"
android:gravity="center"
android:layout_height="wrap_content"/>
</LinearLayout>
Использование: в нужный момент - DialogCustom.newInstance(DialogCustom.HINT,"Подсказка или ответ").show(getSupportFragmentManager,"dialog);
в код фрагмента всегда можно добавить: public static final int ANOTHER_DIALOG = 1; и
case ANOTHER_DIALOG:
return anotherDialog();
чтобы вызывать диалоги для других задач.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости