teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

説明の追加

2018/09/02 15:16

投稿

kakajika
kakajika

スコア3133

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  includeタグがあった場合の処理は [この辺](https://github.com/JetBrains/kotlin/blob/master/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/AndroidLayoutXmlFileManager.kt#L98) にあります。
4
4
  このソースの示すとおり、includeタグの場合は一律で `android.view.View` クラスとして処理してしまっているようです。これはおそらく、対象のレイアウトリソースが1つに定まるとは限らない(Product Flavorによる切り替えなども考慮しなければならない)ためでしょう。
5
5
 
6
- では完全に無理なのかというとそうでもなく、ちょっとしたハックのような方法を見つけました。
6
+ ではクラスを認識させるのが完全に無理なのかというとそうでもなく、ちょっとしたハックのような方法を見つけました。
7
7
 
8
8
  先程のソースをもうちょっと遡ってXMLのパースをしている部分の [ソース](https://github.com/JetBrains/kotlin/blob/master/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidXmlHandler.kt#L37) を読むと、タグそのものの名前よりも `class属性` を優先して見ていることがわかります。これを利用して、includeタグにclass属性を付けてあげることでextensions側にクラスのヒントを与えることができます。(本来class属性はカスタムViewの指定をするために使うものですが、includeタグに付けても特に影響はないようです)
9
9
 

1

説明の追加

2018/09/02 15:16

投稿

kakajika
kakajika

スコア3133

answer CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  では完全に無理なのかというとそうでもなく、ちょっとしたハックのような方法を見つけました。
7
7
 
8
- 先程のソースをもうちょっと遡ってXMLのパースをしている部分の [ソース](https://github.com/JetBrains/kotlin/blob/master/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidXmlHandler.kt#L37) を読むと、タグそのものの名前よりもclass属性を優先して見ていることがわかります。これを利用して、includeタグにclass属性を付けてあげることでextensions側にクラスのヒントを与えることができます。(本来class属性はカスタムViewの指定をするために使うものですが、includeタグに付けても特に影響はないようです)
8
+ 先程のソースをもうちょっと遡ってXMLのパースをしている部分の [ソース](https://github.com/JetBrains/kotlin/blob/master/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidXmlHandler.kt#L37) を読むと、タグそのものの名前よりも `class属性` を優先して見ていることがわかります。これを利用して、includeタグにclass属性を付けてあげることでextensions側にクラスのヒントを与えることができます。(本来class属性はカスタムViewの指定をするために使うものですが、includeタグに付けても特に影響はないようです)
9
9
 
10
10
  ```xml
11
11
  <include