Spinner的Drop Down无法正常工作

时间:2013-02-22 09:41:22

标签: android android-layout dialog custom-controls spinner

我想为我的应用创建custom Spinner Dialog。我找到了this& this。 两者都很好。我根据要求更新了我的代码。当用户点击微调器时,我正在使用选择器文件来更改对话框背景视图。

我的代码工作正常,但问题出在对话框视图中。它传播的宽度,但我想根据一些固定大小得到。

我的Spinner视图的当前输出如下: -

enter image description here

enter image description here

但我需要它跟随: -

enter image description here

Spinner_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/spinner_popup" // it's my selector file
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/Genere_name"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_marginLeft="5dp"
        android:ellipsize="marquee"
        android:gravity="center_vertical"
        android:singleLine="true"
        android:textColor="@android:color/black"
        android:textSize="18sp"
        android:textStyle="bold" />

</LinearLayout>

spinner_popup.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/popup_header" android:state_selected="true"/>
    <item android:drawable="@android:color/transparent" android:state_enabled="true"/>
    <item android:drawable="@drawable/popup_header" android:state_pressed="true"/>
    <item android:drawable="@drawable/popup_bg_box" android:state_enabled="false" android:state_focused="true"/>
    <item android:drawable="@android:color/transparent"/>

</selector>

Main_spinner_view

<LinearLayout
    android:id="@+id/search_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/search_bg"
    android:orientation="horizontal"
    android:weightSum="3" >

    <Spinner
        android:id="@+id/Search_Spinner"
        android:layout_width="95dp"
        android:layout_height="30dp"
        android:layout_gravity="left|center_vertical|center_horizontal"
        android:layout_marginLeft="2dp"
        android:layout_weight="1.2"
        android:background="@drawable/search_dropdown" />

    <EditText
        android:id="@+id/Search_EDT"
        android:layout_width="170dp"
        android:layout_height="30dp"
        android:layout_gravity="center|center_horizontal|center_horizontal"
        android:layout_marginLeft="3dp"
        android:layout_weight="1.5"
        android:background="@drawable/search_textfield"
        android:hint="Search By Free Text"
        android:inputType="textPersonName"
        android:padding="5dp"
        android:textSize="16sp" >
    </EditText>

    <Button
        android:id="@+id/Search_GO"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="right|center_horizontal|center_vertical"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="2dp"
        android:layout_weight="0.3"
        android:background="@drawable/search_icon"
        android:textColor="@android:color/white" />
</LinearLayout>

我在调用我的微调器适配器

Search_Spinner.setAdapter(new MyAdapter(GridViewActivity.this,
                R.layout.spinner_item, Search_Category_List));

我认为java代码不是必需的,但我仍然在这里粘贴,

public class MyAdapter extends ArrayAdapter<String>
    {

        public MyAdapter(Context context, int textViewResourceId,
                ArrayList<String> objects)
        {
            super(context, textViewResourceId, objects);
        }

        @Override
        public View getDropDownView(int position, View convertView,
                ViewGroup parent)
        {

            return getCustomView(position, convertView, parent);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            return getCustomView(position, convertView, parent);
        }

        public View getCustomView(int position, View convertView,
                ViewGroup parent)
        {

            LayoutInflater inflater = getLayoutInflater();
            View row = inflater.inflate(R.layout.spinner_item, parent, false);
            TextView label = (TextView) row.findViewById(R.id.Genere_name);
            spinner_text = Typeface.createFromAsset(getAssets(), "desc.ttf");
            label.setTypeface(spinner_text);
            label.setText(Search_Category_List.get(position));

            return row;
        }
    }

3 个答案:

答案 0 :(得分:0)

您可以尝试将textview的权重设置为0.3,将宽度设置为0dip。您还可以尝试在textView上设置maxWidth。此外,必须为textView设置背景颜色,而不是为微调器项目设置背景颜色,因为宽度将是textView的宽度。

你也可以尝试使用setDropDownWidth,但你必须将minApiLevel设置为16。您可以参考以获取更多信息:http://developer.android.com/reference/android/widget/Spinner.html#attr_android:dropDownVerticalOffset

答案 1 :(得分:0)

在LinearLayout中使用android:layout_width =“wrap_content”而不是android:layout_width =“fill_parent”

答案 2 :(得分:0)

尝试为此

创建transperent活动

请参阅以下代码以获取帮助。 首先删除Spinner控件并将按钮放在那里。 将按钮背景设置为像微调器一样,它显示为像微调器一样。

按钮上的

单击使用此代码

Intent bookIntent = new Intent();
        bookIntent.setClass(MusicAppActivity.this, OptionActivity.class);
        bookIntent.putExtra("cat", stockArr);
        startActivityForResult(bookIntent, 1);




bookIntent.putExtra("cat", stockArr);

从这里传递意图中的数组 这是您想要在新的transperent活动中显示的数组。

OptionActivity

现在创建一个名为OptionActivity的transperent活动

在该transperent活动中创建列表。 并设置活动的宽度和高度

透明活动代码在

之下
public class OptionActivity extends Activity {
    ListView l;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);

        Intent intent = getIntent();
          String[] myStrings = intent.getStringArrayExtra("cat");


         l = (ListView) findViewById(R.id.optionList);

        l.setAdapter(new ArrayAdapter<String>(this, R.layout.headerlist,R.id.text1, myStrings));
        l.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                  String book = l.getAdapter().getItem(position).toString();
                  Intent returnIntent = new Intent();
                  returnIntent.putExtra("SelectedBook",book);
                  setResult(RESULT_OK,returnIntent);       
                  finish();


            }
        });


    }


}

list.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/optionFinish"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/my_custom_background"
    android:layout_marginTop="50dp"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/headerbg" >

        <TextView
            android:id="@+id/viewTournament"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_gravity="center"
            android:ellipsize="marquee"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:freezesText="true"
            android:gravity="center_vertical|center_horizontal"
            android:marqueeRepeatLimit="marquee_forever"
            android:paddingLeft="15dip"
            android:paddingRight="40dip"
            android:scrollHorizontally="true"
            android:singleLine="true"
            android:text="Catagory"
            android:textColor="@android:color/white" />

        <!-- <ImageButton
            android:id="@+id/optionBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:background="@android:color/transparent"
            android:padding="5dip"
            android:src="@drawable/options" /> -->
    </RelativeLayout>

    <ListView
        android:id="@+id/optionList"
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:cacheColorHint="#00000000"
        android:background="@android:color/white"
        android:paddingLeft="2dip"
        android:paddingRight="2dip" >
    </ListView>

</LinearLayout>