如何自定义Spinner中的TextView?

6

我有一个Spinner和一个ArrayAdapter,它向其中提供值。这些视图的布局大致如下:

        <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
(来源:janusz at janusz.de)
我尝试将自己TextView的Id传递到Adapter中,但每次显示旋转器时都会出现异常,提示我提供的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文件中吗?还是要用一个包含它的ViewGroup?

如果能给我一个适配器初始化和TextView定义的例子,将会对我有很大帮助。

3个回答

6

重写 Adapter 的 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。


3
答案是从Spinner的定义中删除填充。每次设置Spinner的填充时,文本都会失真。
下拉框可绘制使用九宫格的填充盒来确定绘制内容的位置。如果手动设置填充,则填充盒的填充定义将被覆盖。
如果您想设置除填充框外的填充,则需要将填充框中的所有内容包装到另一个布局容器中。

1

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

然后使用so图像,例如:

enter image description here

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

图像结果添加到扩展文件9中,例如:img.9.png(IMG可水平和垂直扩展)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接