[英]Android setPrompt custom font
我已經設置了一個微調器,並且將spinnerMode設置為dialog。 我在程序中到處都使用自定義字體,並且我想知道如何設置微調器的提示以使用我的自定義字體。 我到處都在尋找如何執行此操作,但尚未找到它。
到目前為止,這是我設置微調器的方式。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.my_spinner_style, items) {
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Exo-Bold.otf");
((TextView) v).setTypeface(tf);
return v;
}
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View v = super.getDropDownView(position, convertView, parent);
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Exo-Bold.otf");
((TextView)v).setTypeface(tf);
//v.setBackgroundColor(Color.GREEN);
return v;
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
gasChoice.setPrompt("Trip Type");
gasChoice.setAdapter(adapter);
您可能想要設置Spinner的樣式如下:
一種方法:(行不通)
<style name="DropDown" parent="android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar">
<item name="android:typeface">"myTypeFace"</item> <--- but there is no way to reference the custom typeface
</style>
第二種方法:
package com.example.spinner;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.HapticFeedbackConstants;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
import android.widget.ListAdapter;
import android.widget.Spinner;
import android.widget.TextView;
public class SpinnerPlus extends Spinner implements DialogInterface.OnClickListener{
private ListAdapter mPromptAdapter;
private AlertDialog mPromptDialog;
private OnLongClickListener mOnLongClickListener;
public SpinnerPlus(Context context, AttributeSet attrs, int defStyle,
int mode) {
super(context, attrs, defStyle, mode);
// TODO Auto-generated constructor stub
}
public SpinnerPlus(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public SpinnerPlus(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public SpinnerPlus(Context context, int mode) {
super(context, mode);
// TODO Auto-generated constructor stub
}
public SpinnerPlus(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public void setPromptAdapter(ListAdapter adapter){
mPromptAdapter = adapter;
}
@Override
public void setPrompt(CharSequence prompt) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
TextView titleView = new TextView(getContext());
setTypeFace(titleView);
builder.setCustomTitle(titleView);
builder.setSingleChoiceItems(mPromptAdapter, getSelectedItemPosition(), this);
mPromptDialog = builder.create();
}
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
super.setSelection(which);
mPromptDialog.dismiss();
mPromptDialog = null;
}
@Override
public boolean performClick() {
if(!performClick1()){
mPromptDialog.show();
return true;
}
return false;
}
@Override
public void setOnItemClickListener(OnItemClickListener l) {
super.setOnItemClickListener(l);
}
@Override
public void setOnLongClickListener(OnLongClickListener l) {
mOnLongClickListener = l;
super.setOnLongClickListener(l);
}
private void setTypeFace(TextView t){
Typeface tf = Typeface.createFromAsset(t.getContext().getAssets(), "fonts/Exo-Bold.otf");
t.setTypeface(tf);
}
private boolean performClick1(){
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_LONG_CLICKED);
boolean handled = false;
if (mOnLongClickListener != null) {
handled = mOnLongClickListener.onLongClick(this);
}
if (!handled) {
handled = showContextMenu();
}
if (handled) {
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
}
return handled;
}
}
在提示適配器中指定所需的字體:)
干杯,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.