自定义微调器不起作用

时间:2014-11-12 06:48:37

标签: android android-layout

我尝试按照以下方式自定义微调器,其中图像是9补丁图像。

<Spinner
android:layout_width="fill_parent"
android:layout_height="50dp"
android:id="@+id/spinner"
android:textSize="20sp"
android:background="@drawable/image"
/>

结果如下:Spinner screenshot

图像完全隐藏了文本。如何使文字可见?

编辑:

如果我使用image1,我确认我可以在微调器上看到该文本。但是,如果我使用这个image2(由您真正创建),那么我看不到文本。我的9补丁图像似乎有问题。但我无法弄清楚是什么?

3 个答案:

答案 0 :(得分:1)

try this code


layout:- 



 <Spinner
                android:id="@+id/endmonthsp"
                android:layout_width="140dp"
                android:layout_height="50dp"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"

                android:gravity="center" />




Activity:-


ArrayList<String> month = new ArrayList<String>(Arrays.asList("Month",
            "January", "February", "March", "April", "May", "june", "July",
            "August", "September", "October", "November", "December"));



Spinner  spinner5 = (Spinner) findViewById(R.id.endmonthsp);
        startdatemonthadapter = new DateAdapter(this, R.layout.spinnerlayout,
                month);
        spinner1.setAdapter(startdatemonthadapter);
        startdatemonthadapter
                .setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);



Adapter:-

public class DateAdapter extends ArrayAdapter<String> {

    public DateAdapter(Context context, int resource, List<String> objects) {
        super(context, resource, objects);
        // TODO Auto-generated constructor stub
        this.context = context;
    }

    private Context context;

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        View view = convertView;
        if (view == null) {
            LayoutInflater inflate = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            view = inflate.inflate(R.layout.spinnerlayout, null);
        }

        TextView spinneritemTV = (TextView) view
                .findViewById(R.id.spinneritemTV);
        spinneritemTV.setText(getItem(position));
        return view;
    }
}




spinnerlayout:-

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="200dp"
    android:layout_marginBottom="50dp"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_marginTop="50dp" >

    <TextView
        android:id="@+id/spinneritemTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:padding="10dp"
        android:text="Testing "
        android:textColor="#868A8D"
        android:textSize="18sp" />

</RelativeLayout>

答案 1 :(得分:0)

您需要按如下方式设置微调器的背景:

在你的布局xml中:

         <Spinner
             android:id="@+id/spinner1"
             style="@style/spinner_style"
             android:layout_width="match_parent"
             android:layout_gravity="center_vertical"
             android:gravity="center_vertical" 
             android:layout_height="45dp" />

现在在style.xml中为spinner添加一个样式,如下所示:

` <style name="spinner_style">
    <item name="android:background">@drawable/spinner_bg</item>
    <!--
    <item name="android:layout_marginLeft">10dp</item>
    <item name="android:layout_marginRight">10dp</item>
    <item name="android:layout_marginBottom">10dp</item>
    <item name="android:paddingLeft">8dp</item>
    <item name="android:paddingTop">5dp</item>
    <item name="android:paddingBottom">5dp</item>
    -->
    <item  name="android:paddingLeft">5</item>
 </style>`

现在在drawable中创建一个名为spinner_bg.xml的xml:     `

<item><layer-list>
        <item><shape>


                 <gradient android:angle="90" android:endColor="@android:color/transparent" android:startColor="@android:color/transparent" android:type="linear" />

                <padding android:left="2dp" android:right="2dp" />
            </shape></item>
        <item>
            <bitmap android:gravity="center_vertical|left" android:src="your background drawable for spinner here" />
        </item>

    </layer-list></item>

`

根据你的问题,spinner_bg.xml的下面部分就可以了。

 `<item>
      <bitmap android:gravity="center_vertical|left" android:src="your background      drawable for spinner here" />
   </item>`

多数民众赞成。

答案 2 :(得分:0)

像我一样,直接设置微调器背景确实没有错。当然,你不能拥有旋转器的不同“状态”。文本不可见,因为9补丁图像由于某种未知原因而被破坏。我重新创建了图像,现在可以在微调器上看到文本了。还有一件事:如果9补丁上没有定义“内容区域”,则文本将不可见。