請看下面程式碼:
AlertDialog.Builder datetimeDialog = new AlertDialog.Builder(PhrActivity.this);
LayoutInflater inflater = PhrActivity.this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.dialog_datetimepicker, null);
TextView tv_set_time = (TextView)dialogView.findViewById(R.id.tv_set_time);
tv_set_time.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.notif_tb_title_ts));
datetimeDialog.setView(dialogView);
datetimeDialog.setPositiveButton(getResources().getString(R.string.str_btn_set), new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
}
});
datetimeDialog.setNegativeButton(getResources().getString(R.string.str_btn_cancel), null);
final AlertDialog ad = datetimeDialog.create();
ad.setOnShowListener(new DialogInterface.OnShowListener()
{
@Override
public void onShow(DialogInterface dialog)
{
ad.getButton(DialogInterface.BUTTON_POSITIVE)
.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources()
.getDimension(R.dimen.notif_tb_title_ts));
ad.getButton(DialogInterface.BUTTON_NEGATIVE)
.setTextSize(getResources()
.getDimension(R.dimen.notif_tb_title_ts));
}
});
ad.show();
這裡有兩個重點,第一個重點是程式碼:TextView tv_set_time ...
設定字體大小要注意使用getResources().getDimension()這個方法取得值的話會回傳px
但tv_set_time.setTextSize()設定的值是sp,所以必須使另一個多載的方法設定:
TextView tv_set_time = (TextView)dialogView.findViewById(R.id.tv_set_time);
tv_set_time.setTextSize(
TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.notif_tb_title_ts)
);
第二個重點就是,要搞清楚AlertDialog.Builder和AlertDialog建立的方式(因為我就是搞不清楚,哈)。以上面的例子,如果不設定button的文字大小只要寫datetimeDialog.show(),就可以跳出視窗,但要改文字大小,就要使用ad.show()
以下程式碼是錯的是錯的是錯的:
final AlertDialog ad = datetimeDialog.create();
ad.getButton(DialogInterface.BUTTON_POSITIVE)
.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources()
.getDimension(R.dimen.notif_tb_title_ts));
ad.getButton(DialogInterface.BUTTON_NEGATIVE)
.setTextSize(getResources()
.getDimension(R.dimen.notif_tb_title_ts));
要先取得AlertDialog物件才能取得Button物件,但網路上很多都只有寫上述的寫法,但這樣子會回傳NullPointerException,正確應該要寫成是:
final AlertDialog ad = datetimeDialog.create();
ad.setOnShowListener(new DialogInterface.OnShowListener()
{
@Override
public void onShow(DialogInterface dialog)
{
ad.getButton(DialogInterface.BUTTON_POSITIVE)
.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources()
.getDimension(R.dimen.notif_tb_title_ts));
ad.getButton(DialogInterface.BUTTON_NEGATIVE)
.setTextSize(getResources()
.getDimension(R.dimen.notif_tb_title_ts));
}
});
ad.show();
要設定AlertDialog.setOnShowListener(),然後才能在AlertDialog的創建時間設定button的文字大小。如果把ad.show()改成datetimeDialog.show()一樣會跳出視窗,但文字大小是不會改變的,要特別注意啊啊啊!!