Как получить раздутый вид из AlertDialog при использовании setView (int layoutResId)? - PullRequest
0 голосов
/ 26 февраля 2019

Я использую этот код для создания пользовательского AlertDialog:

val dialog = AlertDialog.Builder(context)
            .setView(R.layout.layout)
            .create()

Проблема в том, что я не могу получить завышенное представление.dialog.findViewById(R.id.a_view_in_the_layout) возвращает ноль.

В качестве альтернативы, я могу использовать .setView(View.inflate(context, R.layout.layout, null), но это иногда заставляет диалоговое окно заполнять экран и занимать больше места, чем setView(int layoutResId).

Ответы [ 4 ]

0 голосов
/ 27 февраля 2019

Если я правильно помню, create настраивает диалог, но его расположение не раздувается, пока его не нужно отобразить.Попробуйте сначала позвонить show, а затем найти нужный вам вид.

val dialog = AlertDialog.Builder(context)
            .setView(R.layout.layout)
            .create()

dialog.show() // Cause internal layout to inflate views
dialog.findViewById(...)
0 голосов
/ 26 февраля 2019

Вместо использования alert dialog используйте simple Dialog, это просто и очень просто

final Dialog dialog = new Dialog(context);
        dialog.setContentView((R.layout.layout);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

        TextView tvTitle = (TextView) dialog.findViewById(R.id.tvTitle);
        tvTitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

Вам не нужно раздувать View.

0 голосов
/ 26 февраля 2019

Попробуйте это;

View dialogView; //define this as a gobal field

dialogView = LayoutInflater.from(context).inflate(R.layout.your_view, null);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Title");
builder.setView(dialogView);

View yourView = dialogView.findViewById(R.id.a_view_in_the_layout);
TextView yourTextView = dialogView.findViewById(R.id.a_textView_in_the_layout);
Button yourButton = dialogView.findViewById(R.id.a_button_in_the_layout);
0 голосов
/ 26 февраля 2019

Просто надуйте макет самостоятельно (его Java-код, но я думаю, что вы знаете, что делать):

AlertDialog.Builder dialog = new AlertDialog.Builder(context);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE );
View view = inflater.inflate( R.layout.layout, null );
dialog.setView(view);
dialog.create().show();

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

EditText editText = view.findViewById(R.id.myEdittext);
...