【问题标题】:Spinner Dropdown Arrow微调器下拉箭头
【发布时间】:2017-07-17 21:49:26
【问题描述】:

我正在尝试获取一个自定义 Spinner,例如这个:

但我只能得到这个:

如您所见,我遇到了几个问题。

  1. 虽然我添加了自定义箭头,但我仍然看到原始箭头。
  2. 我的自定义箭头显示在每一行。
  3. 如何调整自定义箭头的尺寸和布局位置?
  4. 如何生成带下划线的行?

这是我的代码:

onCreateView():

Spinner spinner = (Spinner) rootView.findViewById(R.id.spinner);
this.arraySpinner = new String[]{
    "Seleziona una data",
    "03 Agosto 2015",
    "13 Giugno 2015",
    "27 Novembre 2015",
    "30 Dicembre 2015",
};
ArrayAdapter<String> adapter = new ArrayAdapter<>(
        getActivity(),
        R.layout.row_spinner,
        R.id.weekofday,
        arraySpinner);

spinner.setAdapter(adapter);

res/layout/row_spinner.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="8dp">

    <TextView android:id="@+id/weekofday"
        android:singleLine="true"
        android:textSize="@dimen/textSize"
        style="@style/SpinnerDropdown"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <ImageView android:id="@+id/icon"
        android:paddingStart="8dp"
        android:paddingLeft="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/spinner_arrow"/>

</LinearLayout>

编辑

我删除了 ImageView 并添加了第二个 Spinnercreated from Resource:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        getActivity(),
        R.array.date,
        R.layout.spinner_layout);
spinnerDate.setAdapter(adapter);

Spinner spinnerTime = (Spinner) rootView.findViewById(R.id.spinnerTime);
ArrayAdapter<CharSequence> adapterTime = ArrayAdapter.createFromResource(
        getActivity(),
        R.array.ore,
        R.layout.spinner_layout);
spinnerTime.setAdapter(adapterTime);

采用这种布局:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:padding="8dp"
    android:singleLine="true"
    android:layout_height="wrap_content" android:layout_width="match_parent"/>

我已将此添加到我的style.xml

<style name="AppTheme" parent="@style/_AppTheme"/>
<!-- Base application theme. -->
<style name="_AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:dropDownSpinnerStyle">@style/SpinnerTheme   </item>

    <item name="android:windowActionBarOverlay">false</item>
    <item name="colorPrimary">@color/ColorPrimary</item>
    <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
</style>

....
.... 
....

<!--Spinner styles 2-->
<style name="SpinnerTheme" parent="android:Widget.Spinner">
    <item name="android:background">@drawable/apptheme_spinner_background_holo_light</item>
    <item name="android:dropDownSelector">@drawable/apptheme_list_selector_holo_light</item>
</style>

<style name="SpinnerTheme.DropDown">
    <item name="android:spinnerMode">dropdown</item>
</style>

<!-- Changes the spinner drop down item radio button style -->
<style name="DropDownItemSpinnerTheme" parent="android:Widget.DropDownItem.Spinner">
    <item name="android:checkMark">@drawable/apptheme_btn_radio_holo_light</item>
</style>

<style name="ListViewSpinnerTheme" parent="android:Widget.ListView">
    <item name="android:listSelector">@drawable/apptheme_list_selector_holo_light</item>
</style>

<style name="ListViewSpinnerTheme.White" parent="android:Widget.ListView.White">
    <item name="android:listSelector">@drawable/apptheme_list_selector_holo_light</item>
</style>

<style name="SpinnerItemTheme"
    parent="android:TextAppearance.Widget.TextView.SpinnerItem">
    <item name="android:textColor">#000000</item>
</style>

但是没有结果!我仍然看到这个:

编辑 2

我已将style.xml 更改为:

http://pastie.org/private/es40xgebcajajltksyeow

这就是我得到的:

现在,我什至没有替换下拉箭头图标,而是有第二个图标,全息复选框(效果很好,当我选择一个项目时会被选中),但是,我如何只获得我想要的那个? ?

manifest.xml

http://pastie.org/private/tu0izusbvvxe91lwmh9vnw

【问题讨论】:

    标签: android android-layout spinner


    【解决方案1】:

    您必须将Imageview 删除到您的自定义布局row_spinner.xml 中。以防万一,您不需要在自定义布局中创建箭头,因为如果这样做,它将像发生在您身上一样在每一行中创建。为了执行您向我们展示的相同操作,您必须将 Spinner 样式更改为您的 styles.xml

    例如:

    <resources>
    
        <style name="SpinnerTheme" parent="android:Widget.Spinner">
            <item name="android:background">@drawable/spinner_background_holo_light</item>
            <item name="android:dropDownSelector">@drawable/list_selector_holo_light</item>
        </style>
    
        <style name="SpinnerTheme.DropDown">
            <item name="android:spinnerMode">dropdown</item>
        </style>
    
        <!-- Changes the spinner drop down item radio button style -->
        <style name="DropDownItemSpinnerTheme" parent="android:Widget.DropDownItem.Spinner">
            <item name="android:checkMark">@drawable/btn_radio_holo_light</item>
        </style>
    
        <style name="ListViewSpinnerTheme" parent="android:Widget.ListView">
            <item name="android:listSelector">@drawable/list_selector_holo_light</item>
        </style>
    
        <style name="ListViewSpinnerTheme.White" parent="android:Widget.ListView.White">
            <item name="android:listSelector">@drawable/list_selector_holo_light</item>
        </style>
    
        <style name="SpinnerItemTheme" 
                parent="android:TextAppearance.Widget.TextView.SpinnerItem">
            <item name="android:textColor">#000000</item>
        </style>
    
    </resources>
    

    欲了解更多信息,请查看:http://androidopentutorials.com/android-how-to-get-holo-spinner-theme-in-android-2-x/

    编辑

    selector_spinner.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item>
    
            <layer-list>
    
                <item>
                    <shape>
                        <gradient android:angle="90" android:endColor="#ffffff" android:startColor="#ffffff" android:type="linear" />
    
                        <stroke android:width="1dp" android:color="#504a4b" />
    
                        <corners android:radius="5dp" />
    
                        <padding android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp" />
                    </shape>
                </item>
    
                <item>
    
                    <bitmap android:gravity="bottom|right" android:src="@android:drawable/arrow_up_float" />
    
                </item>
    
            </layer-list>
    
        </item>
    
    </selector>
    

    styles.xml:

    <resources>
    
        <!-- Base application theme. -->
        <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
            <item name="android:spinnerStyle">@style/SpinnerTheme</item>
        </style>
    
        <style name="SpinnerTheme" parent="android:Widget.Spinner">
            <item name="android:background">@drawable/selector_spinner</item>
        </style>
    
    </resources>
    

    最后,微调器看起来像

    编辑 2

    以下代码进入details_fragment_three.xml

    <Spinner
        android:id="@+id/spinnerDate"
        android:layout_marginLeft="-8dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/spinner_item_drawable"/> 
    

    【讨论】:

    • 完成。但我仍然看到旧箭头。添加这些样式和箭头图标后,如何应用“SpinnerTheme”?
    • 您不需要申请,因为主题适用于父级为 Spinner 的每个组件作为这部分&lt;style name="SpinnerTheme" parent="android:Widget.Spinner"&gt;。您是否从自定义布局中删除了 ImageView
    • 正如我在您的代码中看到的,您只是使用SpinnerTheme 而不是其他人。我发布的代码只是一个示例,因此您几乎需要更改所有内容。无论如何,我在我的应用程序中测试了一些代码,它运行良好。看看我的编辑,记住这只是一个例子,然后你必须适应它。
    • 抱歉老兄耽搁了。我不知道你的项目是怎么回事。我用我知道的所有方法来做微调器得到style 并且不起作用。但是,我尝试将android:background="@drawable/spinner_item_drawable" 添加到details_fragment_three.xml 中的每个微调器代码中,并且效果很好。所以你不需要在style 中做任何事情。检查我的编辑答案,看看这部分代码现在的样子。
    【解决方案2】:

    您可以使用自己的下拉图片;

            <item>
    
                <layer-list>
    
                    <item>
                        <color android:color="@android:color/white" />
                    </item>
    
                    <item>
                        <bitmap android:gravity="center_vertical|right" android:src="@drawable/down_arrow" /> // down_arrow replace your image
                    </item>
    
                </layer-list>
    
            </item>
    
        </selector>
    

    【讨论】:

      猜你喜欢
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多