我想自动定制mvxbindable列表视图的高亮颜色,从标准橙色到颜色集。我认为这很容易,但我错了:)
我发现我应该使用StateListDrawable设置适配器中列表项的背景drawable。我通过以下方式执行此操作(绿色用于测试,_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>
我一定错过了什么 - 非常感谢任何帮助。
答案 0 :(得分:1)
好的,我自己解决了。这可能是一个新手的错误,但嘿,我解决了它。我也尝试在视图中添加一个click事件,但也没有触发。所以我决定将StateListDrawable添加到listitem的linearlayout而不是视图的背景。这解决了我的问题。
我在适配器中添加了以下方法:
var ll = view.FindViewById<LinearLayout>(Resource.Id.tableViewItem);
if (ll != null)
{
ll.SetBackgroundDrawable(sld);
}
当我将它添加到视图背景中时,我仍然不完全确定它为什么不起作用。 我希望这可能会挽救别人的一天,因为它毁了我的。)