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

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

ただいまの
回答率

91.25%

  • Android

    5372questions

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

  • XML

    538questions

    XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

androidのLayoutを動的に複数生成する方法

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 80

eugenio

score 143

androidアプリを開発しているのですが複数回利用するSpinnerとRadioButton項目をまとめておき
それを5回ほど繰り返して表示したいのですがそういった事は可能でしょうか?

繰り返し表示したい項目まとめレイアウト
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/_layout"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <Spinner
            android:id="@+id/spinner"
            android:layout_width="163dp"
            android:layout_height="35dp"
            android:layout_alignParentEnd="true"
            android:layout_alignParentTop="true"
            android:layout_marginEnd="14dp"
            android:layout_marginTop="24dp" />

        <RadioGroup
            android:id="@+id/radiog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="50dp"
            android:orientation="horizontal">

            <RadioButton
                android:id="@+id/radio1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:drawableBottom="@drawable/ic_menu_camera"
                android:text="" />
                ...

        </RadioGroup>
    </RelativeLayout>
</LinearLayout>


http://android-dev-talk.blogspot.jp/2012/06/xmladdview.html
ここのサンプルが解決に結びついた

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+3

下記の方針で実装してください。
1-繰り返し使用する箇所だけをレイアウトファイルとして定義します。
2-View.inflateでViewインスタンス化します。
3-インスタンスをaddViewしてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/25 11:23

    親Layoutにテキスト項目を作成して
    その下に子LayoutをaddViewしたいんですが
    LinearLayoutをaddViewすると子Layoutで埋められてしまうのを回避できませんでしょうか?
    val root = inflater.inflate(R.layout.inc_main, null) as LinearLayout
    val testLayout = inflater.inflate(R.layout.child, null) as LinearLayout
    root.addView(testLayout)

    キャンセル

  • 2017/12/25 14:35

    「埋められてしまう」とは具体的にどの様な状況でしょうか。
    仮にViewが表示領域から押し出されてしまうということであれば、ScrollViewを利用したり、そもそものレイアウトを考え直す必要が有ります。
    また、ListViewの導入を考えるのもいいですね。

    キャンセル

  • 2017/12/25 15:11 編集

    実験的に3つ生成し3回addViewしたのですが
    親viewに記載していたテキストviewが消滅し、画面上追加した子要素のみになっていました
    val root = LinearLayout(this)
    val testLayout = inflater.inflate(R.layout.child, null) as LinearLayout
    val testLayout2 = inflater.inflate(R.layout.child, null) as LinearLayout
    val testLayout3 = inflater.inflate(R.layout.child, null) as LinearLayout
    root.addView(testLayout)
    root.addView(testLayout2)
    root.addView(testLayout3)

    キャンセル

  • 2017/12/25 15:42

    setContentViewを使っていませんか?
    これは、既存のViewツリーにViewを追加するメソッドではなく、Viewツリーを根こそぎ取り替えるメソッドです。

    キャンセル

  • 2017/12/25 16:52

    最後のところでsetContentView()していたのが原因でしたありがとうございました!

    キャンセル

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

ただいまの回答率

91.25%

関連した質問

同じタグがついた質問を見る

  • Android

    5372questions

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

  • XML

    538questions

    XMLは仕様の1つで、マークアップ言語群を構築するために使われています。