[Titanium] TextFieldにカーソル(キャレット)が表示されない

textfield_cursorTitaniumで作ったアプリを最近買ったNexus5で動作確認しているときの覚書。

入力時にカーソルの位置(キャレット)が表示されないので入力しづらい。Galaxy S2(Android 4.0.3)ではこの現象は起きなかった。

環境: Titanium SDK 3.2.2.GA, android:targetSdkVersion=19, Android 4.4.2

どうやらAndroidのテーマを理解する必要があるらしい。

 

修正手順

1.カスタムスタイルを定義するXMLファイルを用意。

プロジェクトフォルダに「platform/android/res/values/styles.xml」を作成。

次のように記述。nullに設定するとcolorと同じ色を使うようになるらしい。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.MyTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:textCursorDrawable">@null</item>
    </style>
</resources>

 

2.tiapp.xmlに作成したカスタムスタイル名を指定。

<android>
    <manifest>
        <application android:theme="@style/Theme.MyTheme">
        </application>
        <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19"/>
    </manifest>
</android>

これでとりあえず表示されるようになった。…けど薄い。

 

次は、これを応用して青色にする場合の手順。

1.カーソルの形状を指定するXMLファイルを用意。

「platform/android/res/drawable/style_cursor.xml」を作成。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
  <size android:width="2dp" />
  <solid android:color="#0000ff" />
</shape>

 

2.さっき作成したstyles.xmlを修正。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.MyTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:textCursorDrawable">@drawable/style_cursor</item>
    </style>
</resources>

 

ちなみにTextFieldの下に表示されるアンダーラインは背景色(backgroundColor)を設定すると表示されなくなる。

 

< Related Posts >