Android微调器下拉高度未包装到内容

时间:2014-07-31 04:42:07

标签: android android-spinner

我创建了一个带下拉列表的微调器,我使用自定义数组适配器来填充下拉列表。 由于某种原因,下拉高度占据整个屏幕。即使下拉列表只有2行。

我尝试过设置。但没用。知道为什么吗?

<Spinner
                android:id="@+id/sample"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.7"
                android:background="@drawable/spinner"
                android:dropDownWidth="618dp"
                android:dropDownHeight="468dp"
            </Spinner>

编辑:我发现了问题。因为sample_dialog是一个相对布局。如果我把它改成线性布局它工作正常。但是为什么我不能使用相对布局?

 @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        View view = inflater.inflate(R.layout.sample_dialog, null);

2 个答案:

答案 0 :(得分:1)

在您的活动中使用我的功能:

dimens.xml:

<dimen name="my_dimen">140dp</dimen>

我的活动:

    private void SpinnerHeight(Spinner spinner) {
        try {
            Field popup = Spinner.class.getDeclaredField("mPopup");
            popup.setAccessible(true);

            // Get private mPopup member variable and try cast to ListPopupWindow
            android.widget.ListPopupWindow popupWindow = (android.widget.ListPopupWindow) popup.get(spinner);

            // Set popupWindow height to 140dp


            int altoSpinner = (int) getResources().getDimension(R.dimen.my_dimen);
                popupWindow.setHeight(altoSpinner);


        } catch (NoClassDefFoundError | ClassCastException | NoSuchFieldException | IllegalAccessException e) {
            // silently fail...
        }
    }

My_spinner.setAdapter(adapterData);

SpinnerHeight(My_spinner);

答案 1 :(得分:0)

因为在您的微调器中,您在dropDownWidth中指定了dropDownHeightsome dp value,它占据了整个屏幕。 删除您的问题将被解决,因为它会自动换行dropDownWidthdropDownHeight。所以,spinner代码应该是这样的,

<Spinner
   android:id="@+id/sample"
   android:layout_width="0dp"
   android:layout_height="wrap_content"
   android:layout_weight="0.7"
   android:background="@drawable/spinner"
</Spinner>