[Titanium] TextFieldにカーソル(キャレット)が表示されない
Titaniumで作ったアプリを最近買ったNexus5で動作確認しているときの覚書。
入力時にカーソルの位置(キャレット)が表示されないので入力しづらい。Galaxy S2(Android 4.0.3)ではこの現象は起きなかった。
環境: Titanium SDK 3.2.2.GA, android:targetSdkVersion=19, Android 4.4.2
どうやらAndroidのテーマを理解する必要があるらしい。
- [#TIMOB-13567] Android: Textfield cursor not visible when setting API level to 11 or above - Appcelerator JIRA
- Built-in Themes - Titanium 3.X - Appcelerator Docs
修正手順
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 >