質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

3232閲覧

CustomView の中で不要な root view を含めずに layout を infrate したい

s_of_p

総合スコア11

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/12/17 18:38

編集2016/12/17 18:40

###前提・実現したいこと
Fragment の代わりに CustomView を使用する実装を試しています。CustomView 中でも自身が ViewGroup を継承していれば infrate() を行うことで layout.xml を読み込むことが出来ますが、以下の記事にあるように継承元の ViewGroup 又は CustomView クラス自身が view の階層に差し込まれてしまいます。

http://trickyandroid.com/protip-inflating-layout-for-your-custom-view/

元記事では layout.xml 中で merge タグや include を使用することでこの問題を回避していますが、layout.xml 中のルートタグを変えるとデザインビューで IDE 支援を受けることが出来なくなってしまいます。最近は ConstraintLayout のような、IDE 機能を生かした View クラスもある為これが使用出来なくなるのは厳しいです。

layout.xml のルートタグを変更せずに CustomView 内で merge 相当のことを行う方法があれば理想的ですが、そのような方法は見付けることが出来ませんでした。良いアプローチの方法があれば教えて下さい。

###試したこと
以下のようなアプローチは検討しています。

  • CustomView を諦めて Fragment でやる
  • View が差し込まれることを気にしない(FrameLayout 等にしておけば実装に影響も無く、パフォーマンスへの影響も大したことは無いはず)
  • CustomView で ViewGroup を継承せずに、レイアウトの親にあたるインスタンスを保持して inflate() 時の第二引数 root に渡す(上手くいくか不明、そもそも余計なインスタンスを保持することが良くない気配がある)

###補足情報(言語/FW/ツール等のバージョンなど)
以下のページも参考にさせて頂きました。

http://y-anz-m.blogspot.jp/2012/04/android-viewgroup.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

<merge> タグのプロパティを定義すれば、Android Studio の preview に表示させることが可能です。

参照記事:One small trick one can utilise with <merge> is to take advantage of preview mode for IDE like:

xml

1<merge 2 xmlns:android=”http://schemas.android.com/apk/res/android" 3 xmlns:tools=”http://schemas.android.com/tools" 4 android:layout_width=”match_parent” 5 android:layout_height=”match_parent” 6 tools:parentTag=”LinearLayout” 7 tools:orientation=”horizontal”> 8 9... 10 11<merge/>

投稿2017/04/22 20:59

編集2017/04/22 21:10
YasuakiShibata

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_of_p

2017/05/24 02:22

tools:parentTag 属性を指定することで Design エディタも使用することが出来ました。 `tools:parentTag="android.support.constraint.ConstraintLayout"` とすることで ConstraintLayout の Design エディタでの編集も正しく出来ました。 現在カスタムビューによるレイアウトを利用していないので細かい動作確認が出来ていませんが、次回試す際に参考にします。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問