【问题标题】:Xamarin Android how to change the height of a spinner in a list viewXamarin Android 如何在列表视图中更改微调器的高度
【发布时间】:2016-01-14 05:44:14
【问题描述】:

我有一个显示在列表视图中的微调器。我需要更改微调器的高度,但无论出于何种原因,微调器的高度都不会改变。基本上我需要将高度增加到列表视图中项目的高度。下面是 Listview 的模板:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:paddingRight="17dp"
        android:paddingLeft="17dp">
        <LinearLayout
            android:orientation="vertical"
            android:minWidth="25px"
            android:minHeight="25px"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/DateTextView"
                android:textSize="24dp"
                android:textColor="#000000" />
            <TextView
                android:layout_width="match_parent"
                android:layout_height="20dp"
                android:id="@+id/DayOfWeekTextView"
                android:ellipsize="end"
                android:textStyle="bold"
                android:textColor="#000000" />
        </LinearLayout>
        <Spinner
            android:id="@+id/spinner"
            android:layout_width="wrap_content"
            android:layout_alignParentRight="true"
            android:drawSelectorOnTop="false"
            android:textSize="40px"
            android:textColor="#FFFFFF"
            android:layout_centerVertical="false"
            android:drawingCacheQuality="high"
            android:layout_height="fill_parent" />
    </RelativeLayout>

这是旋转器电流的显示方式:

这就是我希望它的显示方式

微调器的适配器代码:

    public override Android.Views.View GetView(int position, Android.Views.View convertView, ViewGroup parent)
    {
        var item = statuses[position];
        var view = (convertView ?? activity.LayoutInflater.Inflate(Android.Resource.Layout.SimpleSpinnerItem,
            parent,
            false));
        Android.Graphics.Color customColor = new Android.Graphics.Color();

        view.SetBackgroundColor(Android.Graphics.Color.ParseColor(item.nStatusColor));
        var name = view.FindViewById<TextView>(Android.Resource.Id.Text1);
        //name.SetHeight(50);
        name.Text = item.nStatus;
        return view;
    }

【问题讨论】:

    标签: android listview xamarin xamarin.android spinner


    【解决方案1】:

    因此,与以编程方式执行此操作相比,我开始考虑布局。然后我意识到设置高度的答案是将一个 RelativeLayout 作为父级添加到 Spinner。然后填充_parent。请看下面的代码!

    <RelativeLayout
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_alignParentRight="true"
        android:layout_width="match_parent"
        android:layout_height="fill_parent">
        <Spinner
            android:id="@+id/spinner"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:drawSelectorOnTop="false"
            android:drawingCacheQuality="high"
            android:textColor="#FFFFFF" />
    </RelativeLayout>
    

    【讨论】:

      【解决方案2】:

      如果列表视图中有另一个对象,也可以尝试android:layout_height="fill_parent",您可以使用alignTopalignBottom

      【讨论】:

        【解决方案3】:

        您必须创建自己的可绘制 xml 文件并将其设置为 Spinner 的背景属性。我会尽快给你一个例子。

        可绘制资源:保存为可绘制目录中的 spinner.xml

        <?xml version="1.0" encoding="utf-8"?>
        <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:state_pressed="true">
                <shape android:shape="rectangle">
                    <corners android:radius="3dip" />
                    <stroke android:width="1dip" android:color="#FF327935" />
                    <gradient android:angle="-90" android:endColor="#FF6BCA70" android:startColor="#FF327935" />
                </shape>
            </item>
            <item android:state_focused="true">
                <shape android:shape="rectangle">
                    <corners android:radius="3dip" />
                    <stroke android:width="1dip" android:color="#FFFFFFFF" />
                    <gradient android:angle="-90" android:endColor="#FF6BCA70" android:startColor="#FF327935" />
                </shape>
            </item>
            <item android:state_enabled="false">
                <shape android:shape="rectangle">
                    <corners android:radius="3dip" />
                    <stroke android:width="1dip" android:color="#FF327935" />
                    <gradient android:angle="-90" android:endColor="#FFCCCCCC" android:startColor="#FF333333" />
                </shape>
            </item>
            <item android:state_drag_hovered="true">
                <shape android:shape="rectangle">
                    <corners android:radius="3dip" />
                    <stroke android:width="1dip" android:color="#FFFFFFFF" />
                    <gradient android:angle="-90" android:endColor="#FF6BCA70" android:startColor="#FF327935" />
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <corners android:radius="3dip" />
                    <stroke android:width="1dip" android:color="#FFFFFFFF" />
                    <gradient android:angle="-90" android:endColor="#FF6BCA70" android:startColor="#FF327935" />
                </shape>
            </item>
        </selector>
        

        微调器:

        <Spinner
            android:id="@+id/spinnerMonths"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/imageView4"
            android:layout_alignTop="@+id/imageView4"
            android:layout_toStartOf="@+id/imageView4"
            android:background="@drawable/spinner"
            android:spinnerMode="dialog"
            android:textAlignment="center" />
        

        编辑

        试试这个

        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal"
        android:paddingLeft="17dp"
        android:paddingRight="17dp">
        
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:minHeight="25px"
            android:minWidth="25px"
            android:orientation="vertical">
        
            <TextView
                android:id="@+id/DateTextView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="#000000"
                android:textSize="24sp" />
        
            <TextView
                android:id="@+id/DayOfWeekTextView"
                android:layout_width="match_parent"
                android:layout_height="20dp"
                android:ellipsize="end"
                android:textColor="#000000"
                android:textStyle="bold" />
        
        
        </LinearLayout>
        
        <Spinner
            android:id="@+id/spinner"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_centerVertical="false"
            android:background="@drawable/spinner"
            android:drawSelectorOnTop="false"
            android:drawingCacheQuality="high"
            android:textColor="#FFFFFF"
            android:textSize="20sp" />
        </RelativeLayout>
        

        编辑 2

            public override Android.Views.View GetView(int position, Android.Views.View convertView, ViewGroup parent)
            {
                var item = statuses[position];
                var view = (convertView ?? activity.LayoutInflater.Inflate(Android.Resource.Layout.SimpleSpinnerItem,
                    parent,
                    false));
                Android.Graphics.Color customColor = new Android.Graphics.Color();
        
                view.SetBackgroundColor(Android.Graphics.Color.ParseColor(item.nStatusColor));
                var name = view.FindViewById<TextView>(Android.Resource.Id.Text1);
                //name.SetHeight(50);
        
                ViewGroup.LayoutParams mParams = parent.getLayoutParams();
                mParams.height = 50;
                view.setLayoutParams(mParams);
        
                name.Text = item.nStatus;
                return view;
            }
        

        【讨论】:

        • 是的。把它放在 drawable 文件夹中,然后从 Spinner 的背景属性指向它。
        • 我有:android:background="@drawable/spinner"。您必须创建一个名为 spinner.xml 的新 XML 资源文件
        • 由于 200dp 的固定高度,这只是一个巨大的微调器。
        • 新更新。使用自定义背景属性,您应该能够更改高度。
        • 这让尺寸更接近,但如果你注意到我在适配器中使用这条线来设置背景颜色:view.SetBackgroundColor(Android.Graphics.Color.ParseColor(item.nStatusColor));跨度>
        猜你喜欢
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多