android - 如何更改微调器的文本大小和方向

标签 android android-layout spinner

我需要更改微调器上显示的所选项目的文本大小和方向,但我还需要继续使用微调器的默认布局:android.R.layout.simple_spinner_item

为什么?因为如果我使用个性化布局,我无法在微调器上加载动态生成的字符串数组。这是 Android 的失败:S

有人可以帮帮我吗?

最佳答案

好吧,这有点棘手,但不是太难。

  1. 扩展 SimpleAdapter,创建自定义适配器。
  2. 确保您在这个新适配器中实现了 SpinnerAdapter。 (如果您使用的是 Eclipse,让它通过创建未实现的方法来帮助您)
  3. 实现 SpinnerAdapter 将强制您添加下拉 View 资源 xml 对象。静态添加它,或定义一个 setter。
  4. public View getView(int position, View convertView, ViewGroup parent) 内(这是您将自定义 View 返回给 Spinner 的地方),调用 parent.getSelectedItem() 查看它是否与列表中 位置 的项目相同。
  5. 如果是,请将字体设置得更大。如果不是,请将其设置为正常(不要忘记这样做,因为微调器会回收 View ,将较大的字体留在原处)。

要使用适配器,请从您的 Activity 中调用如下内容:

MyCustomSpinnerAdapter adapter = new MyCustomSpinnerAdapter(this, myListOfItems);
adapter.setDropDownViewResource(R.layout.my_dropdown_view_resource);
mySpinner.setAdapter(adapter);

要了解 google 是如何做到的,请查看 google codesearch here并搜索“Android ArrayAdapter.java”——点击 core/java/android/widget 链接,它会带你到包含所有各种适配器、接口(interface)和小部件的包,你需要解决剩下的问题。

祝你好运。

编辑:这是一个未经测试的第一次破解示例:

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;

import com.beget.consumer.R;

public class MyCustomSpinnerAdapter extends BaseAdapter implements SpinnerAdapter {

    private String[] list;
    private Context context;

    public MyCustomSpinnerAdapter(Context context, String[] list) {
        super();
        this.list = list;
        this.context = context;
        // TODO Auto-generated constructor stub
    }

    @Override
    public int getCount() {
        return list.length;
    }

    @Override
    public Object getItem(int position) {
        //you need to add index safety here - make sure that position is a valid index
        return list[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if (convertView == null) {
            convertView = context.inflate(R.layout.my_view_item, null);
            holder = new ViewHolder();
            holder.myView = (TextView) convertView.findViewById(R.id.beget_box_description);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();

        }

        if (list[position] == ((Spinner) parent).getSelectedItem()) {
            holder.myView.setTextSize(25);
        } else {
            holder.myView.setTextSize(15);
        }

        holder.myView.setText(list[position]);

        return convertView;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        //change this if you want a different view for your dropdown list. It's the same as above, except you could 
        //inflate a different view if you wanted.
        return getView(position, convertView, parent);
    }

    static class ViewHolder {
        TextView myView;
    }

}

关于android - 如何更改微调器的文本大小和方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6826708/

相关文章:

c# - 将c#解密方法转换为android

java - 实现微调器时遇到问题

Android导航组件: How to solve the circular navigation with nested graph?

android - ImageView 不显示图像钛

java - 如何修复 "Exception raised during rendering: android.view.View cannot be cast to android.view.ViewGroup"

android - MotionLayout 滑动而不捕捉到状态?

android - 如何显示全屏 TYPE_SYSTEM_ALERT 窗口?

android - 如何在微调器中为已知的 rowid 选择行?

android - Spinner 错误时的 ClickListener

android - 有条件地显示按钮