2015-02-25 3 views
0

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

  • EditText и Button будут привязаны к нижней части представления. EditText может расти и сокращаться, чтобы показать одну или несколько строк текста. Кнопка будет помещена справа от EditText.
  • MvvmCross MvxListView заполнит оставшееся пространство. MvxListView должен автоматически изменяться по вертикали, поскольку EditText сжимается и растет, или клавиатура открывается пользователем.

Я не смог придумать что-то, что работает точно так, как я хочу. Проблема с моим текущим решением - это жесткий код. Когда я помещаю две строки текста, я получаю перекрывающиеся представления. Кто-нибудь знает, как я могу заставить MvxListView расти/сокращаться, чтобы заполнить оставшееся пространство?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <Mvx.MvxListView 
     android:id="@+id/MessageConversationView_MessageList" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentTop="true" 
     android:dividerHeight="2dp" 
     android:divider="@null" 
     android:stackFromBottom="true" 
     android:transcriptMode="alwaysScroll" 
     android:layout_marginBottom="50dp" 
     local:MvxBind="ItemsSource Messages" /> 
    <RelativeLayout 
     android:id="@+id/InnerRelativeLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true"> 
     <Button 
      android:text="Send" 
      android:id="@+id/Button" 
      android:layout_alignParentRight="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
     <EditText 
      android:id="@+id/EditText" 
      android:layout_width="fill_parent" 
      android:layout_toLeftOf="@id/Button" 
      android:layout_height="wrap_content" /> 
    </RelativeLayout> 
</RelativeLayout> 
+0

Что такое 'Mvx.MvxListView'? – Marcus

+0

Я использую C#, MvvmCross и Xamarin.Android. Mvx.MvxListView - это элемент управления ListView MvvmCross. MvvmCross - это библиотека C# MVVM для Android, iOS, Windows Phone и т. Д. –

ответ

1

Если я понял вас правильно, вам нужно что-то вроде ниже. Примечание. Я написал этот код с помощью Android Studio и обычного ListView, т. Е. Он не тестировался на Xamarin.

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

    <RelativeLayout 
     android:id="@+id/InnerRelativeLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true"> 

     <Button 

      android:text="Send" 
      android:id="@+id/Button" 
      android:layout_alignParentRight="true" 

      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <EditText 
      android:id="@+id/EditText" 
      android:layout_width="fill_parent" 
      android:layout_toLeftOf="@id/Button" 
      android:layout_height="wrap_content" /> 
    </RelativeLayout> 

    <Mvx.MvxListView 
     android:layout_above="@+id/InnerRelativeLayout" 
     android:id="@+id/MessageConversationView_MessageList" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentTop="true" 
     android:dividerHeight="2dp" 
     android:divider="@null" 
     android:stackFromBottom="true" 
     android:transcriptMode="alwaysScroll" 
     local:MvxBind="ItemsSource Messages" /> 

</RelativeLayout> 

Результат с заполненным списком:

Result

Результат, когда пользователь вводит текст:

Result2

Это делает работу с Xamarin, а также.

+0

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

+0

Да, это было плохо, я забыл отформатировать его должным образом. Попробуйте сейчас :-) @TrevorBalcom – Marcus

+0

Теперь он работает. Я вижу, что ключевое различие между вашим компоновкой и моим - это вложение второго RelativeLayout и добавление layout_above в ListView. –

Смежные вопросы