4

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

我的代码运行良好,但问题出在对话框视图中。它传播了那个宽度,但我想根据一些固定尺寸来获得。

我的 Spinner View 的当前输出如下:-

在此处输入图像描述

在此处输入图像描述

但我需要它如下: -

在此处输入图像描述

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;
        }
    }
4

3 回答 3

1

尝试为此创建透明活动

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

在按钮上单击使用此代码

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




bookIntent.putExtra("cat", stockArr);

从此处传递数组意图 这是您要在新的透明活动中显示的数组。

OptionActivity

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

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

透明活动代码如下

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>
于 2013-02-22T12:11:19.503 回答
0

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

于 2013-02-22T09:57:05.247 回答
0

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

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

于 2013-02-22T09:44:41.560 回答