如何在Spinner中自定义TextView?

时间:2010-04-26 15:57:25

标签: android layout spinner

我有一个带有ArrayAdapter的Spinner,可以将值提供给它。此视图的布局如下所示:

        <TextView
           android:text="Household Income: "
           android:layout_width="wrap_content"
           android:layout_height="fill_parent"
           android:gravity="center_vertical" />

        <Spinner
           android:id="@+id/incomespinner"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:padding="2dip"  />

问题是文本对于视图来说很长,结果是一个非常非常丑陋的微调器。从截图中可以看出:

alt text http://janusz.de/~janusz/spinner.png

我试图将我自己的TextView的Id传递给适配器,但是每次应该显示微调器我都会得到一个异常,即我提供的Id无效:

04-26 17:38:39.695: ERROR/AndroidRuntime(4276): android.content.res.Resources$NotFoundException: Resource ID #0x7f09003a type #0x12 is not valid

我在哪里定义TextView?在一个单独的xml文件中?有周围的视图组?

如果我能看到适配器初始化和textview定义的示例,那对我有很大帮助吗?

3 个答案:

答案 0 :(得分:5)

覆盖适配器的getView方法以创建自定义列表视图项。

View getView(int position, View  convertView, ViewGroup  parent) {
     TextView tv = null;
     if(covertView instanceof TextView) {
          tv = (TextView) convertView;
     } else {
          tv = new TextView(this);
          tv.setText("Awesome Text");
     }
     return tv;
}

此外,当您创建适配器时,您可以传入用于项目的布局,因此在这种情况下,ConvertView将是RelativeLayout或LinearLayout。

答案 1 :(得分:3)

答案是从Spinner的定义中删除填充。 每次我设置Spinner的填充时,Text都会变形。

微调器drawable正在使用九个补丁中的填充框来确定绘制内容的位置。如果我手动设置填充,将覆盖填充框中填充的定义。

如果除了填充框之外还要设置填充,则需要将paddinbox中的所有内容包装到另一个Layout容器中。

答案 2 :(得分:1)

使用/home/user/android-sdk-linux/tools/./draw9patch(用于linux),在Windows上转到android-sdk-windows目录下的工具并执行draw9patch。

并使用so image,例如:

enter image description here

注意图像中的黑色线条。 (这条黑线是由draw9patch生成的)

图像结果添加到扩展文件9,例如:img.9.png(IMG EXPANSIVE HORIZONTAL AND VERTICAL)