Android:我应用中所有Spinners的全局样式

时间:2017-12-24 05:21:54

标签: android xamarin layout xamarin.android spinner

我在Visual Studio 2017中使用Xamarin Android。

我有一些现有的Spinners,它们是用xml布局创建的,它们都可以完美地工作,并且完全按照我希望它们的外观进行设计。这些代码通常是:

        <Spinner
            android:spinnerMode="dialog"
            android:id="@+id/SpnProject"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:layout_marginBottom="8dp"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:paddingStart="8dp"
            android:paddingEnd="8dp"
            android:background="@drawable/myspinner"
            android:prompt="@string/project_prompt" />

效果很好,我的小背景图像都正确呈现..

现在我正在尝试动态创建一些其他的微调器,100%通过代码(不是布局XML)。我用我的代码动态地将它们放在LinearLayout中。

要创建其中一个,代码通常是:

                    Spinner CustomPicker = new Spinner(TheActivity);
                    List<CustomAttributeOption> AttOptions = db.GetCustomAttributeOptions(ThisAtt.AttributeId);
                    ArrayAdapter<CustomAttributeOption> AttOptionsAdapter = new ArrayAdapter<CustomAttributeOption>(Activity, Android.Resource.Layout.SimpleSpinnerDropDownItem, AttOptions);
                    CustomPicker.Adapter = AttOptionsAdapter;
                    customAttributeHolder.AddView(CustomPicker, StackerPosition);

此代码全部完成,我的表单上会出现一个新的动态Spinner。 但它有默认样式,我想应用与我的其他微调器相同的样式,具体来说,我希望这些动态微调器具有指定的高度= 40dp。我似乎无法使用代码在任何地方指定layoutHeight = 40dp?是否必须使用styles / xml完成​​?

我尝试设置主题并为我的Activity中的所有Spinners指定样式,但是应用程序无法构建或运行。

理想情况下,我真的想从布局XML中删除layout_height和layout_width值,并且只是将它定义为ONCE,就像在全球风格中为我的ENIRE PROJECT中的所有SPINNERS一样。

可以这样做,还是你被迫根据具体情况为每个小部件指定宽度和高度?

1 个答案:

答案 0 :(得分:1)

您可以使用布局inflater以自动神奇地&#34;应用您可以定义的样式。

让我们假设你有一个&#34;全球&#34; Spinner的样式:

<style name="MySpinnerStyle" parent="android:Widget.Spinner">
    <item name="android:spinnerMode">dialog</item> 
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">40dp</item>
    <item name="android:layout_marginBottom">8dp</item> 
    <item name="android:paddingTop">8dp</item> 
    <item name="android:paddingBottom">8dp</item> 
    <item name="android:paddingStart">8dp</item> 
    <item name="android:paddingEnd">8dp</item> 
    <item name="android:background">@drawable/myspinner</item> 
    <item name="android:prompt">@string/project_prompt</item> 
</style>

为您创建的使用全局微调器样式的动态微调器创建独立的Layout

<?xml version="1.0" encoding="UTF-8" ?>
<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/masterSpinner"
        style="@style/MySpinnerStyle" />

现在,不是实例化新的Spinner,而是对布局进行充气,并且会分配所有相关的属性:

var spinner = LayoutInflater.Inflate(Resource.Layout.Spinner, rootLayout, false) as Spinner;
spinner.Adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerItem, new string[] { "Stack", "Over", "Flow" });
customAttributeHolder.AddView(spinner, StackerPosition);