从Spinner下拉菜单中移除边距

20

我有一个类似下面图片的旋转器:

enter image description here

如何去除旋转器和其下拉菜单之间左侧x方向上的间隙 - 最好是在API8上也能有效的解决方法,因为我想尽可能地降低我的应用要求。

我一开始认为这应该是缩进spinners样式中的layout_margin造成的,但是在阅读了这个问题后,发现那不可能。

在我的主题中,我有以下设置;

<style name="AppTheme" parent="AppBaseTheme">        
        <item name="android:dropDownListViewStyle">@style/DropDownStyle</item>
    <item name="android:dropDownSelector">@style/DropDownStyle</item>                
</style>


<style name="DropDownTopStyle">

   <item name="android:clickable">true</item>
   <item name="android:background">@drawable/dropdowntop</item>

</style>

<style name="DropDownStyle">

   <item name="android:layout_width">fill_parent</item>
   <item name="android:layout_height">fill_parent</item> 
   <item name="android:layout_marginLeft">0dp</item> 
   <item name="android:layout_margin">0dp</item> 

   <item name="android:clickable">true</item>
   <item name="android:background">@drawable/dropdownback</item>
   <item name="android:popupBackground">@drawable/dropdownback</item>
   <item name="android:cacheColorHint">#FFF000</item>    
  </style>

谢谢, Thomas

另外; 我可以看到可能有一种方法在代码中自己制作弹出窗口 - 如果需要,我能否以某种方式获得适配器的弹出视图?(即它显示的列表)。从头开始重新创建整个适配器行为似乎是一种可怕的方法 - 但如果我可以进入那个视图并禁用正常的弹出行为,那么我就可以制作自己的弹出窗口而没有烦人的偏移量。


你有想出解决方案吗? - Anubian Noob
@AnubianNoob 请将你的布局发布到paste bin上。 - Simas
这是一个非常普遍的问题。我有一个自定义的下拉框,它在一个浮动窗口中附加到一个服务上。我的布局真的很重要吗? - Anubian Noob
@AnubianNoob 这不是一个普遍的问题,因为我似乎无法重新创建这个问题。 - Simas
4个回答

3

看起来你需要扩展 Spinner 视图以制作自己的 AlertDialog,它可以显示项目列表,或者在新版本中(API 16+)你可以使用 android:dropDownHorizontalOffset="-8dp"。在这里查看完整细节:如何更改打开的 Spinner 的位置?


2

你想要的是这样的吗?

enter image description here

如果是这样,这里是代码(适用于 API 级别 9 以下):

Activity:

public class MainActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Spinner spinnerListOptions = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<CharSequence> adapterListOptions = ArrayAdapter.createFromResource(this, R.array.string_array,
            R.layout.spinner_item_top);
        adapterListOptions.setDropDownViewResource(R.layout.spinner_item_dropdown);
        spinnerListOptions.setAdapter(adapterListOptions);
    }
}

spinner_item_top.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
      android:layout_height="29dp"
      android:textSize="12sp"
      android:gravity="center">
</TextView>

spinner_item_dropdown.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
      android:layout_height="29dp"
      android:textSize="12sp"
      android:gravity="center">
</TextView>

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

   <Spinner
           android:id="@+id/spinner"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_centerInParent="true"/>

</RelativeLayout>

strings.xml:

<resources>
<string-array name="string_array">
    <item>item 1</item>
    <item>item 2</item>
    <item>item 3</item>
</string-array>
</resources>

0

试试这个,应该可以工作

    <style name="DropDownStyle">

   <item name="android:layout_width">0dp</item>

-3

我不确定是否可能,因为所有的视图项如Spinner、EditText等都是在Android SDK中的小图片。你应该检查一下9patched SDK图像中是否有默认填充,如果有的话,我认为你不能这样做。 此外,不要忘记检查Android源代码中的基本Spinner类,也许有一些技巧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接