私はAndroid開発の初心者です。アンドロイドスピナーアイテムのテキストサイズをプログラマティックに設定する方法は?
私の状況は、主な解決策がスピナー項目用のカスタムXMLを作成するだけであるgoogleにある100万件の問題(スピナー関連)とは異なるようです。
私のアプリケーションでは、スピナーアイテムのテキストをデバイスの物理サイズに合わせてサイズ調整する必要があります。それは画面の高さ/幅の一定の割合を取る必要があります。つまり、PxとDpのサイジングは私をここで助けません。私は、API15で開発が行われていることに注意してください。
あなたが見ることができるように、私は、選択表示し、ドロップダウンリストのカスタムspinner_item
のデフォルトのスピナー項目のレイアウトを使用しています。カスタムレイアウトはTextView
だけです。
アプリケーションの起動時に、レイアウトコンポーネントの正確なピクセル値をプログラムで計算します。このアプリケーションは、タブレット/電話機のdpi、解像度、物理サイズに関係なく同じに見えます。
問題はスピナーにあります。私は、選択とドロップダウンリストのテキストのサイズを変更する方法を把握していないようです。
私は、アダプタオブジェクト内の1つの機能が見つかりました:ドキュメントは言う
adapter.GetDropDownView(int position, View convertView, ViewGroup parent);
を:
は、内の指定された位置にポップアップデータのドロップダウンで表示するビューを取得します。データセット。
ポジション int:私たちが望むアイテムのインデックス。
convertView表示: 可能であれば、再利用するための古いビュー。注:使用する前に、この ビューがnullではなく、適切なタイプであることを確認する必要があります。このビューを変換して正しいデータを表示することが可能でない場合は、 このメソッドは新しいビューを作成できます。
親のViewGroup:このビュー は、最終的に
position
に添付されますことを、親は私には明らかです。
convertView
は謎です。この古い眺めはどこにありますか?この見解は正確には何ですか?このパラメータにはどうすればよいですか?
parent
は私にとっては不明です。それは何ですか?ドロップダウンリストの親はSpinnerだと私は思います。最悪の場合、親もアクティビティかもしれませんが、両方ともViewGroup
に属していないので、ここで実際に何が必要なのか分かりません。
EDIT1
:また、私はこれを試してみました:
(mySpinner.GetChildAt(n) as TextView).SetTextSize(Android.Util.ComplexUnitType.Px, 100);
しかし、それはadapter.Count
はそれでの項目を有しているmySpinner.ChildCount
がであること、が判明しました。
EDIT2:
が受け入れ答えに基づいて、私はアンドロイド
class SpinnerStringAdapter: Android.Widget.ArrayAdapter {
/// <summary>
/// Array items' text height in screen pixels
/// </summary>
private int ActualTextSize = 20;
/// <summary>
/// Display items as bold text
/// </summary>
private bool IsBold = false;
/// <summary>
/// Creates array adapter with custom sized text.
/// </summary>
/// <param name="AContext">The current context.</param>
/// <param name="ALayoutID">The resource ID for a layout file containing a TextView to use when instantiating views.</param>
/// <param name="AStringList">The string objects to represent in the ListView.</param>
/// <param name="ADisplay">The display of the parent activity</param>
/// <param name="ATextSize">The size of a text for the array items. Size in percents of Display height</param>
public SpinnerStringAdapter(Context AContext, int ALayoutID, System.Collections.IList AStringList, Display ADisplay, double ATextSize, bool AIsBold):
base(AContext, ALayoutID, AStringList) {
Android.Graphics.Point size = new Android.Graphics.Point();
ADisplay.GetSize(size);
int width = size.X;
int height = size.Y;
ActualTextSize = Convert.ToInt32(height * ATextSize/100); // Convert percent to fraction and calculate actual height
IsBold = AIsBold;
}
public override View GetDropDownView(int position, View convertView, ViewGroup parent) {
TextView tv = (LayoutInflater.From(Context).Inflate(Resource.Layout.spinner_item, parent, false) as TextView);
tv.SetTextSize(Android.Util.ComplexUnitType.Px, ActualTextSize);
tv.SetText(GetItem(position).ToString(), TextView.BufferType.Normal);
if (IsBold) {
tv.SetTypeface(null, Android.Graphics.TypefaceStyle.Bold);
}
return tv;
}
public override View GetView(int position, View convertView, ViewGroup parent) {
TextView tv = (LayoutInflater.From(Context).Inflate(Resource.Layout.spinner_item, parent, false) as TextView);
tv.SetTextSize(Android.Util.ComplexUnitType.Px, ActualTextSize);
tv.SetText(GetItem(position).ToString(), TextView.BufferType.Normal);
if (IsBold) {
tv.SetTypeface(null, Android.Graphics.TypefaceStyle.Bold);
}
return tv;
}
}