【问题标题】:MvvmCross Custom Spinner keep default appearanceMvvmCross Custom Spinner 保持默认外观
【发布时间】:2014-01-29 18:46:18
【问题描述】:

我在我的 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" />

【问题讨论】:

    标签: android xamarin mvvmcross


    【解决方案1】:

    Checkable spinners 和支持 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 listitem 在使用之前会将这些显示的列表项包装在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 中的列表项的查询 - 所以请注意更改和更新可能会发生在此区域 - 近期发布的版本可能会更改此处的默认外观。

    【讨论】:

      【解决方案2】:

      以下适用于 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" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-10
        • 2022-01-22
        • 2016-03-12
        • 1970-01-01
        • 1970-01-01
        • 2016-04-09
        相关资源
        最近更新 更多