【问题标题】:Customize selector colors for mvxbindablelist using mvvmcross / mono droid使用 mvvmcross / mono droid 为 mvxbindablelist 自定义选择器颜色
【发布时间】:2013-06-28 09:28:16
【问题描述】:

我想将 mvxbindable 列表视图的突出显示颜色从标准橙色自定义为动态设置的颜色。我认为这很容易,但我错了:)

我发现我应该使用 StateListDrawable 在适配器中设置列表项的背景可绘制对象。我通过以下方式执行此操作(绿色用于测试,_backgroundGradient 在构造函数中创建);

 public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var view =base.GetView(position, convertView, parent);

            StateListDrawable sld = new StateListDrawable();


            sld.AddState(new int[] { Android.Resource.Attribute.StateFocused }, new ColorDrawable(Color.Green));

            sld.AddState(new int[] { Android.Resource.Attribute.StatePressed }, new ColorDrawable(Color.Green));

            sld.AddState(new int[] {}, _backgroundGradient);

            view.Focusable = true;

            if (view != null)
            {
                view.SetBackgroundDrawable(sld);     
            }


            return view;
        }

但是,当单击列表项时,没有显示颜色。以下来自我的xml:

<listitem>

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:local="http://schemas.android.com/apk/res/dk.appsfabrikken.cmsapp"
  android:id="@+id/tableViewItem"
  android:layout_width="fill_parent"
  android:layout_height="90dp"
  android:paddingBottom="1dp"

  local:MvxBind="{'Click':{'Path':'ShowCellDetails'}}">

  <CmsApp.Droid.Controls.UmbracoImageView
    android:id="@+id/viewImagePreview"
    android:layout_width="90dp"
    android:layout_height="90dp"
    android:scaleType="centerCrop"
    android:padding="5dp"
    local:MvxBind="{'ImageData':{'Path':'ImageIconData'},'HideImage':{'Path':'Hidden'}}" />

  <TextView
    android:layout_gravity="center_vertical"
    android:id="@+id/title"
    android:textStyle="bold"
    android:textColor="@color/table_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    local:MvxBind="{'Text':{'Path':'Title'}}" />

</LinearLayout>

我一定遗漏了一些东西 - 非常感谢任何帮助。

【问题讨论】:

    标签: android-listview xamarin.android mvvmcross


    【解决方案1】:

    好的,我自己解决了。这可能是一个菜鸟错误,但嘿我解决了。我也尝试向视图添加一个点击事件,但这也没有被触发。所以我决定将 StateListDrawable 添加到列表项的线性布局而不是视图的背景中。这解决了我的问题。

    我在适配器中的方法中添加了以下内容:

      var ll = view.FindViewById<LinearLayout>(Resource.Id.tableViewItem);
                if (ll != null)
                {
                    ll.SetBackgroundDrawable(sld);
                } 
    

    我仍然不完全确定为什么当我将它添加到视图背景时它不起作用。 我希望这可以挽救别人的一天,因为它毁了我的:)

    【讨论】:

    • 您知道可以直接在 XML 中执行此操作吗?
    • 是的,但是颜色的定义是动态的,并且是从网络服务中获取的。
    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 2012-09-11
    • 2013-07-18
    • 2014-04-11
    • 2020-10-14
    • 2013-02-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多