Android делает диалог прокручиваемым

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

Итак: как мне сделать мой диалог прокручиваемым? Видимо, мой код не помогает:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical"
    android:scrollbars="vertical"
    android:scrollbarAlwaysDrawVerticalTrack="true">

<EditText         
   android:id="@+id/addKlantNaam"
   android:textSize="20sp"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:hint="@string/klantNaam" 
   />

<EditText         
   android:id="@+id/addKlantLocatie"
   android:textSize="20sp"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:hint="@string/klantLocatie" 
   />

<TextView
    android:id="@+id/scheidenDoorKomma"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="16sp"
    android:text="@string/scheidenDoorKomma"/>

<EditText         
   android:id="@+id/addFabrieken"
   android:textSize="20sp"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:hint="@string/fabrieken" 
   />

 <EditText        
   android:id="@+id/addMachines"
   android:textSize="20sp"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:hint="@string/machines" 
   />

 <RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom" >

    <Button
        android:id="@+id/dialogAnnuleren"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"        
        android:text="@string/annuleren"
        android:textSize="22sp" />

    <Button
        android:id="@+id/dialogToevoegen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"   
        android:layout_toRightOf="@+id/dialogAnnuleren"     
        android:textSize="22sp"
        android:text="@string/toevoegen"/>
  </RelativeLayout>

</LinearLayout>

This is how i call for the dialog:

btnAdd.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View arg0) {

            // custom dialog
            dialog = new Dialog(context);
            dialog.setContentView(R.layout.addklant_layout);
            dialog.setTitle("Klant toevoegen");

            Button BTNannuleren = (Button) dialog.findViewById(R.id.dialogAnnuleren);
            // if button is clicked, close the custom dialog
            BTNannuleren.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });

            Button BTNtoevoegen = (Button) dialog.findViewById(R.id.dialogToevoegen);
            // if button is clicked, close the custom dialog
            BTNtoevoegen.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    StoreKlantInDatabase task = new StoreKlantInDatabase();     
                        task.execute(urlInsertKlant);
                        dialog.dismiss();
                    }
            });      
            dialog.show();
      }
    });

кто-нибудь может помочь мне здесь?


person GeertG    schedule 01.10.2013    source источник
comment
из того, что я знаю, нет способа сделать диалог или действие прокручиваемым... просто представление, подобное просмотру списка или прокрутке... поэтому ваш вариант - по-разному упорядочить свои представления или создать изменение фокуса, которое закрывает клавиатуру при внешнем нажатии, но получение клавиатуры всегда будет блокировать часть вашего интерфейса ... либо это, либо расположение их по-другому или меньших размеров   -  person Jony-Y    schedule 01.10.2013
comment
Кстати, вы должны использовать wrap_content или match_parent вместо fill_parent   -  person Jony-Y    schedule 01.10.2013
comment
ах, жаль: p Мое приложение будет работать в разных размерах, поэтому я не хочу давать диалогу заранее определенную высоту. Итак, я думаю, что практически мой единственный вариант - отредактировать клавиатуру и позволить пользователю перейти к следующему EditText при нажатии ввода? Потому что постоянное закрытие и открытие клавиатуры мне кажется раздражающим.   -  person GeertG    schedule 01.10.2013
comment
В прокрутке или в lineairlayout?   -  person GeertG    schedule 01.10.2013
comment
Насколько я знаю, в Scrollview есть только один дочерний элемент... поэтому я не думаю, что это решение... если вы хотите, я покажу вам, как я использовал свой... но вы также должны знать, что для разных устройств требуется разное разрешение, поэтому почти наверняка вам придется изменить размеры для xlarge устройств большого или нормального размера ... и не давать ему предопределенную высоту ... масштабировать вещи, которые вы всегда должны пытаться использовать wrap_content или match_parent   -  person Jony-Y    schedule 01.10.2013
comment
попробуйте использовать onfocuse change, чтобы закрыть клавиатуру, но да... если вы не запрограммируете клавиатуру жестко, она закроется и откроется... большинство приложений работают так... это не редкость   -  person Jony-Y    schedule 01.10.2013
comment
о, ок, спасибо. Да, пожалуйста, можете ли вы показать, как вы использовали свой? Вы можете опубликовать это как ответ, я думаю.   -  person GeertG    schedule 01.10.2013
comment
stackoverflow.com/questions/4259607/   -  person Jony-Y    schedule 01.10.2013
comment
попробуй это может сработать   -  person Jony-Y    schedule 01.10.2013
comment
блин, тоже не работает :s Думаю, это просто невозможно, как хотелось бы :p   -  person GeertG    schedule 01.10.2013


Ответы (3)


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

В дополнение к этому вы можете рассмотреть возможность изменения действия по умолчанию кнопки «Ввод» на клавиатуре, чтобы выбрать следующий EditText и, наконец, отправить форму, когда вы закончите (прочитайте об этом здесь):

android:imeOptions="actionDone"
person CodeMonkey    schedule 01.10.2013

GeertG ... теперь я эмоционально вовлечен :) попробуйте ссылку, которую я нашел ... это может помочь в использовании прокрутки с более чем одним ребенком ... я не знаю, решит ли это вашу проблему, но ... Если ScrollView поддерживает только один прямой дочерний элемент, как мне сделать весь макет прокручиваемым?

or

как добавить несколько дочерних элементов в горизонтальную прокрутку в андроид

Эти решения должны работать как создание прокрутки с более чем 1 дочерним элементом... решит ли это вашу проблему? Я НЕ ЗНАЮ...

также загляните в

Как скрыть программную клавиатуру на Android после нажатия снаружи Редактировать текст?

но то, что клавиатура закрыта и снова открыта, кажется мне разумным ... не задерживайтесь на ней слишком долго :)

person Jony-Y    schedule 01.10.2013
comment
Ха-ха, спасибо ;) Я пробовал ссылки, но я думаю, дело в том, что это невозможно. Я буду использовать android:imeOptions=actionDone и android:singleLine=true, чтобы клавиатура скрывалась при вводе. Вы правы, я приму тот факт, что клавиатура опускается и выскакивает ;) Спасибо за помощь. - person GeertG; 01.10.2013
comment
Допустим, я надеюсь, что это самая большая проблема, с которой вы столкнетесь :) не большая... надеюсь, я помог :) - person Jony-Y; 01.10.2013

Используйте высоту LinearLayout match_parent. И попробуй работает или нет.

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical"
    android:scrollbars="vertical"
    android:scrollbarAlwaysDrawVerticalTrack="true">
person Pratik Dasa    schedule 01.10.2013
comment
Спасибо за ответ. Я пробовал, но он не работает :( Он также выдает предупреждение, когда я меняю его на match_parent (этот LinearLayout должен использовать android:layout_height=wrap_content) - person GeertG; 01.10.2013
comment
затем попробуйте также использовать fill_parent. - person Pratik Dasa; 01.10.2013
comment
android:scrollbars=vertical, поместите эту строку в тег ScrollView. - person Pratik Dasa; 01.10.2013
comment
Извините, тоже не работает (пробовал с wrap_content и match_parent) - person GeertG; 01.10.2013