AndroidのAlertDialogのフォントを手軽に変更するソースです。海外の端末で中華フォントしかない場合、AlertDialogのフォントの変更方法がなかなか見つからないですよね。それにAlertDialogのリストを使ったときも大変。
だから書いてみました。というか必要に迫られて便利だったので。
一応、AlertDialog内のButtonとTextView、EditTextとListViewに対応しています。
必要ならRadioButtonなども追加してみたらどうでしょうか。

あ、もちろん、いろんな人のソースを参考にしています。

//IPAゴシックをディレクトリにコピーしてから使うとき
Typeface type_face = Typeface.createFromFile(getFilesDir() + "/ipaexg.ttf");
copyRawFile(this, R.raw.ipaexg, "ipaexg.ttf");

AlertDialog dialog = new AlertDialog.Builder(this)
	.setIcon(R.drawable.icon)
	.setTitle(R.string.title)
	.setMessage(R.string.msg)
	.setPositiveButton(R.string.yes,new DialogInterface.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int whichButton) {
			dialog.dismiss();
			finish();
		}
	})
	.setNegativeButton(R.string.no,new DialogInterface.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int whichButton) {
			dialog.dismiss();
		}
	})
	.create();
	dialog = set_dialog_font(this,dialog,type_face);
	dialog.show();


//Rawからフォルダにコピー
public void copyRawFile(Context context, int resourceId, String fileName) {
	   InputStream input = null;
	   OutputStream output = null;
	   try {
		   input = context.getResources().openRawResource(resourceId);
		   output = context.openFileOutput(fileName, Context.MODE_PRIVATE);
		   byte[] buff = new byte[1024*4];
		   int size = 0;
		   while((size = input.read(buff)) >= 0) {
			   output.write(buff, 0, size);
		   }
		   output.flush();
		   output.close();
		   input.close();
		   output = null;
		   input = null;
	   }catch(Exception e) {
		   try {
			   if(output != null) output.close();
			   if(input != null) input.close();
		   }catch(Exception e2){
		   }
	   }
   }

//子要素のフォントを変更
private void overrideFonts(final Context context, final View v ,Typeface type) {
		try {
			if (v instanceof ViewGroup) {
			ViewGroup vg = (ViewGroup) v;
			for (int i = 0; i < vg.getChildCount(); i++) {
			View child = vg.getChildAt(i);
			A_PointSystem.overrideFonts(context, child,type);
			}
			} else if (v instanceof EditText || 
				   v instanceof TextView ||
				   v instanceof Button) {
				((TextView) v).setTypeface(type);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


//AlertDialogの要素を変更
private AlertDialog set_dialog_font(final Context context,AlertDialog alertDialog ,Typeface type){
    	alertDialog.setOnShowListener(new OnShowListener() {
            @Override
            public void onShow(DialogInterface alert) {
            	Button bt0 =  ((AlertDialog)alert).getButton(Dialog.BUTTON1);
                Button bt1 =  ((AlertDialog)alert).getButton(Dialog.BUTTON2);
                Button bt2 =  ((AlertDialog)alert).getButton(Dialog.BUTTON3);
                if(bt0!=null){bt0.setTypeface(TitleActivity.g_type_face);}
                if(bt1!=null){bt1.setTypeface(TitleActivity.g_type_face);}
                if(bt2!=null){bt2.setTypeface(TitleActivity.g_type_face);}
                
                Window w = ((AlertDialog)alert).getWindow();
                
                View v = w.getDecorView();
                if(v!=null){
                	overrideFonts(context,v,TitleActivity.g_type_face);
                }
                ListView listView = ((AlertDialog)alert).getListView();
                if(listView==null) return;
                final ListAdapter originalAdapter = listView.getAdapter();
                listView.setAdapter(new ListAdapter()
                {
                    @Override
                    public int getCount() {
                        return originalAdapter.getCount();
                    }
                    @Override
                    public Object getItem(int id) {
                        return originalAdapter.getItem(id);
                    }
                    @Override
                    public long getItemId(int id) {
                        return originalAdapter.getItemId(id);
                    }
                    @Override
                    public int getItemViewType(int id) {
                        return originalAdapter.getItemViewType(id);
                    }
                    @Override
                    public View getView(int position, View convertView, ViewGroup parent) {
                        View view = originalAdapter.getView(position, convertView, parent);
                        TextView textView = (TextView)view;
                        textView.setTypeface(type_face);
                        return view;
                    }
                    @Override
                    public int getViewTypeCount() {
                        return originalAdapter.getViewTypeCount();
                    }
                    @Override
                    public boolean hasStableIds() {
                        return originalAdapter.hasStableIds();
                    }
                    @Override
                    public boolean isEmpty() {
                        return originalAdapter.isEmpty();
                    }
                    @Override
                    public void registerDataSetObserver(DataSetObserver observer) {
                        originalAdapter.registerDataSetObserver(observer);

                    }
                    @Override
                    public void unregisterDataSetObserver(DataSetObserver observer) {
                        originalAdapter.unregisterDataSetObserver(observer);

                    }
                    @Override
                    public boolean areAllItemsEnabled() {
                        return originalAdapter.areAllItemsEnabled();
                    }
                    @Override
                    public boolean isEnabled(int position) {
                        return originalAdapter.isEnabled(position);
                    }

                });
            }
        });
    	return alertDialog;
}