自定义TintSpinner的样式

首先为啥要用TintSpinner 而不是Spinner?

参见使用AppCompat_v7 21.0.0d的几个兼容问题

然后是我们要自定义的效果是



也就是说选中的样式是白色的文字,下拉的样式是黑色的文字,这样一个小小的需要,也很需要技巧。

首先,TintSpinner的adapter需要使用ArrayAdapter,而不能使用BaseAdapter,之前我走的弯路是想用BaseAdapter然后在找

adapter.setDropDownViewResource(R.layout.drop_down_item);

方法,结果显然易见,BaseAdapter更不就没有这个方法,为啥?


因为BaseAdapter实现的是ListAdapter, SpinnerAdapter接口:

public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter

而ArrayAdapter是BaseAdapter的子类

public class ArrayAdapter<T> extends BaseAdapter implements Filterable

所以看到在找不到setDropDownViewResource方法。


疑惑解除了,下面就看下怎么实现了这个adapter了:

model为

public class EndemicArea {

    @JsonField("description")
    private String description;
    @JsonField("name")
    private String name;
    @JsonField("pk")
    private int pk;

    public EndemicArea(String description, String name, int pk) {
        this.description = description;
        this.name = name;
        this.pk = pk;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPk() {
        return pk;
    }

    public void setPk(int pk) {
        this.pk = pk;
    }

}

Adapter为:

public class EndemicAreaSpinnerAdapter extends ArrayAdapter<EndemicArea> {


    private LayoutInflater layoutInflater;

    public EndemicAreaSpinnerAdapter(Context context, int resource, List<EndemicArea> endemicAreaList) {
        super(context, resource, endemicAreaList);
        layoutInflater = LayoutInflater.from(context);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = layoutInflater.inflate(R.layout.choose_bed_item, null);
        TextView areaName = (TextView) view.findViewById(R.id.choose_bed_item_name);
        areaName.setText(getItem(position).getName());
        return view;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        View view = layoutInflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
        CheckedTextView areaName = (CheckedTextView) view.findViewById(android.R.id.text1);
        areaName.setText(getItem(position).getName());
        return view;
    }
}

choose_bed_item.xml为

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/choose_bed_item_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="4dp"
    android:gravity="center"
    android:paddingBottom="10dp"
    android:layout_marginRight="8dp"
    android:paddingTop="10dp"
    android:textColor="@color/white"
    android:textSize="20sp">

</TextView>

最后:

 tintSpinner = new TintSpinner(getActivity());
        tintSpinner.setBackgroundResource(R.drawable.abc_spinner_mtrl_am_alpha);
        tintSpinner.setAdapter(spinnerAdapter);

注意:TintSpinner来着import android.support.v7.internal.widget.TintSpinner;

看来Spinner需要ArrayAdapter才能定制下拉的样式,然后就可以完全自定义了。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArcScene是ArcGIS中的一款三维可视化工具,可以用来创建和编辑三维地理数据。在ArcScene中,可以自定义符号样式来使地图更加生动和美观。 首先,在ArcScene中打开要制作符号样式的图层。选择要修改的图层,右键点击图层,选择“属性”。 然后,在“属性”对话框中选择“符号”选项卡。在这里,可以选择已有的符号样式,也可以自定义新的符号样式自定义符号样式的方法有很多,以下是其中一种常用的方法: 1. 选择“选择符号”按钮,可以打开符号选择对话框,选择需要的符号样式进行修改。 2. 在符号选择对话框中,可以修改符号的填充颜色、边界线颜色和宽度、符号的大小和形状等。 3. 通过“符号修改器”按钮可以进一步修改符号的属性。在符号修改器中,可以调整符号的透明度、阴影、亮度和对比度等。 4. 如果需要更多自定义选项,可以使用“更多符号”按钮。在更多符号对话框中,可以选择更多的符号类型和样式,并进行修改。 5. 修改完成后,可以点击“确定”按钮进行确认,即可将自定义符号样式应用到图层中。 除了上述方法,还可以使用ArcScene中的符号编辑工具来绘制和编辑符号样式,以及使用ArcGIS符号库中的符号进行自定义。 通过自定义符号样式,可以使ArcScene中的地图更具个性特点,使其更加符合用户需求和展示要求。同时,自定义符号样式也可以提高地图的可视化效果,使其更加美观并容易被理解和识别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值