【问题标题】:Customize Android Spinner XML w/ SpinnerAdapter?使用 SpinnerAdapter 自定义 Android Spinner XML?
【发布时间】:2014-07-17 23:19:30
【问题描述】:

我正在使用来自 GitHub 的源代码,正在尝试编辑微调器的外观。对 Spinner 的唯一引用是在这个 java 文件中,我找不到可以为微调器设置自定义布局 XML 的位置。这是java文件:

package com.wallpaper.core;

import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.SpinnerAdapter;

import java.util.ArrayList;

public class Adapter extends BaseAdapter implements SpinnerAdapter {

private final String TAG = "Adapter";
private final OnGetViewListener mListener;
private ArrayList<?> mData;
private final LayoutInflater mInflater;

public static interface OnGetViewListener {
    public View getView (int position, View convertView, ViewGroup parent, LayoutInflater mInflater);
}

public Adapter (OnGetViewListener listener, Activity activity) {
    this.mData = new ArrayList<Object>();
    this.mInflater = LayoutInflater.from(activity);
    this.mListener = listener;
}

public Adapter (OnGetViewListener listener, Activity activity, ArrayList<?> data) {
    this.mData = (data == null) ? new ArrayList<Object>() : data;
    this.mInflater = LayoutInflater.from(activity);
    this.mListener = listener;
}

public ArrayList<?> getData () {
    return this.mData;
}

public void setData (ArrayList<?> data) {
    this.mData = data;
}

public void clearData () {
    this.mData.clear();
}

@Override
public int getCount () {
    if (mData == null)
        Log.d(TAG, "getCount() Data Set Is Null");
    return (mData != null) ? mData.size() : 0;
}

@Override
public Object getItem (int position) {
    if (mData == null)
        Log.d(TAG, "getItem(int position) Data Set Is Null");
    return (mData != null) ? mData.get(position) : null;
}

@Override
public long getItemId (int position) {
    if (mData == null)
        Log.d(TAG, "getItemId(int position) Data Set Is Null");
    return (mData != null) ? position : 0;
}

@Override
public View getView (int position, View convertView, ViewGroup parent) {
    return (mListener == null) ? new LinearLayout(mInflater.getContext()) : this.mListener.getView(position, convertView, parent, mInflater);
}

@Override
public View getDropDownView (int position, View convertView, ViewGroup parent) {
    return (mListener == null) ? new LinearLayout(mInflater.getContext()) : this.mListener.getView(position, convertView, parent, mInflater);
}

}

【问题讨论】:

  • 查找适配器设置到微调器的位置。您可以在那里修改微调器的外观。

标签: java android xml spinner


【解决方案1】:

在你想要的地方定义你的微调器

 <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:background="@drawable/spinner_button_dropdown"
        ></Spinner>

作为 spinner_button_dropdown,您可以使用这样的选择器(我知道您不是要求这样做,但它显示了如何自定义外观):

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/spinner_pressed" android:state_pressed="true" />

    <item android:drawable="@drawable/spinner_normal" android:state_focused="true" />

    <item android:drawable="@drawable/spinner_normal" />

</selector>

在你的代码中你膨胀它

mySpinner = (Spinner)getView().findViewById(R.id.spinner);
mySpinner.setAdapter(myAdapter);
myAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

如您所见,此示例中的微调器外观不是从内部设置的,而是用户 3249477 说的从外部设置的。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多