2

所以我面临的问题不是主观判断什么对用户最有利(我认为),而是有哪些选项可用于说明定位。

想想某种团队运动应用程序,您可以在其中为球员放置小点(然后我可以用一些代表球员的 UI 组件替换这些点)以球员姓名首字母推销,您可以在其中拖放红色和蓝色点

我用gridview尝试了这个,这非常困难,因为我需要设置一定数量的行/列,并且当你使用分辨率更高的手机时它们不会缩放,所以开始破解“自定义组件”感觉就像我在重新发明轮子。

有比编写自己的组件更好的选择吗?

如果有什么不同,我正在使用 xamarin.android

4

1 回答 1

6

我将使用 MvvmCross 数据绑定针对集合绑定的 FrameLayout 来实现这一点。

该方法的核心使用在parent 中包含的 parent 中 child 的TranslationXandTranslationY属性。ViewFrameLayout

父母是:

<?xml version="1.0" encoding="utf-8"?>
<pointsongrid.BindableFrameLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:local="http://schemas.android.com/apk/res/points.on.grid"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  local:MvxBind="ItemsSource Points"
  local:MvxItemTemplate="@layout/item"/>

列表项是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res/points.on.grid"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    local:MvxBind="TranslationX X, Converter=X;TranslationY Y, Converter=Y"
  >
  <LinearLayout
    android:layout_width="20dp"
    android:layout_height="20dp"
    local:MvxBind="BackgroundColor Color, Converter=NativeColor"
  />      
  <TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    local:MvxBind="Text Player"
    />      
</LinearLayout>

StackOverflow 的整个代码有点长,所以我发布了一个快速仓库来演示 - https://github.com/slodge/MvvmCross-Players - 那里的数据绑定 FrameLayout 肯定可以改进 - 看看 LinearLayout 代码如果您需要对更改列表的支持(例如 ObservableCollection),请参考主要的 MvvmCross 存储库。

结果看起来有点像:

在此处输入图像描述

于 2013-03-20T19:02:11.147 回答