2014-01-10 59 views
2

我使用MvvmCross在Xamarin Android應用程序中有一個自定義微調。我使用自定義的唯一原因是因爲該模型擁有一個類,我希望微調器使用該類的屬性填充值。但是,下拉菜單的外觀看起來不像我的應用程序的其餘部分。它缺少右側的單選按鈕,並且間距已關閉。我如何使這個自定義微調器看起來像其餘的一樣?MvvmCross自定義微調保持默認外觀

<Mvx.MvxSpinner 
     style="@style/spinner_input" 
     local:MvxItemTemplate="@layout/item_spinner" 
     local:MvxDropDownItemTemplate="@layout/item_spinnerdropdown" 
     local:MvxBind="ItemsSource ProductCategoryOptions; SelectedItem SelectedProductCategory" /> 

Item_Spinner.axml - 這部分似乎是恰到好處,選擇了值下降的外表下一次看起來就像別人。

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:local="http://schemas.android.com/apk/res-auto" 
      android:singleLine="true" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textColor="@color/black" 
      android:text="Test" 
      local:MvxBind="Text Caption" /> 

Item_SpinnerDropDown.axml - 我認爲這是錯誤的文件。下拉列表的外觀不匹配。

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    android:singleLine="true" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:textColor="@color/black" 
    android:text="Test" 
    local:MvxBind="Text Caption" /> 

回答

2

Checkable紡紗和還支持activated狀態指示燈下的作品是值得我們最近內MvvmCross工作的 - 例如,看到這個問題和相關承諾https://github.com/MvvmCross/MvvmCross/issues/481

要使MvxSpinner支持默認樣式,那麼您應該能夠簡單地指定沒有local:MvxItemTemplate而不是local:MvxDropDownItemTemplate - 在第是這樣,那麼微調使用的資源:

global::Android.Resource.Layout.SimpleDropDownItem1Line 
global::Android.Resource.Layout.SimpleSpinnerDropDownItem 

這將只需要使用標準的Android佈局模板,但會依賴於你的列表項ToString()實現,而不是使用Caption性能。

這與微調和適配器在「普通」Android應用中使用的內容類似 - 例如,看到http://developer.android.com/guide/topics/ui/controls/spinner.html

Spinner spinner = (Spinner) findViewById(R.id.spinner); 
// Create an ArrayAdapter using the string array and a default spinner layout 
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
     R.array.planets_array, android.R.layout.simple_spinner_item); 
// Specify the layout to use when the list of choices appears 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
// Apply the adapter to the spinner 
spinner.setAdapter(adapter); 

如果不是想寫自己微調佈局和立足他們對Android的佈局,然後它可能是最容易尋找到了Android源找到原來的佈局 - 例如看着:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/layout/simple_spinner_dropdown_item.xml/

一個小先進警告這裏是標準MvvmCross列表項將使用它之前包裝在framelayout這些顯示列表項。這對許多佈局沒有影響 - 但可能會影響一些佈局。如果它影響你的,那麼你可能需要編寫自己的自定義列表項視圖(基於https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding.Droid/Views/MvxBaseListItemView.cs


最後一個音符在這一點 - 請注意https://github.com/MvvmCross/MvvmCross/issues/481仍然是開放的,再加上有一個查詢的framelayout列表項在https://github.com/MvvmCross/MvvmCross/issues/539包裝 - 所以請注意,在這方面的變化和更新可能發生 - 在不久的將來發布可能會改變默認外觀。

1

爲Item_SpinnerDropDown.axml

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    style="?android:attr/spinnerDropDownItemStyle" 
    android:singleLine="true" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    local:MvxBind="Text Caption" />