2016-11-09 9 views
0

私は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; 
    } 
} 

答えて

0

まず用のC#/ Xamarinするには、Androidのコードは、Javaを変換したソリューションは、カスタムアダプタクラスを作成することができますArrayAdapterを継承します。この方法では、ドロップダウンポップアップの表示を変更するために、 'getDropDownView'をオーバーライドすることができます(この場合、TextPlace ej textview1で 'customspinneritem.xml'を定義する必要があります)。

@Override 
public View getDropDownView(int position, View convertView, ViewGroup parent) 
{ 
    View v = getLayoutInflater().inflate(R.layout.customspinneritem, parent, false); 
    TextView tv = (TextView) v.findViewById(R.id.textview1); 
    tv.setTextSize(**whatever**); 
    tv.setText(languages[position]); 
    return v; 
} 

あなたがそれをクリックする前に、スピナーの表示を変更したい場合は、上書きする一つの機能は「getViewメソッド(int型の位置、表示convertView、のViewGroup親)」になり