0

xmlで宣言されたLinearLayoutsに複数のLinearLayoutsを追加しようとしています。誰もがコードで編集される3つのtextViewを持っています。私の問題は、私はコード内のViewオブジェクトにXMLレイアウトを膨らませているとき、すべての余白は無視されます。私の2番目の質問: どのように私は動的にidをテキストビューに設定し、テキストを編集できますか?膨張さLinearLayoutへのビューの拡大とこのビューのcmponentsの編集

のLinearLayoutのXML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/pointsAwaiting" 
    android:layout_marginTop="40dp" 
    android:background="@drawable/background_blue" 
    android:orientation="horizontal" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:padding="10dp"> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:textColor="#FFFFFF" 
      android:textSize="20dp" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="2" 
      android:textColor="#FFFFFF" 
      android:textSize="15dp" /> 

    </LinearLayout> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:layout_weight="2" 
     android:padding="10dp" 
     android:textColor="#FFFFFF" 
     android:textSize="20dp" /> 

</LinearLayout> 
彼は、コードのこの部分に膨張さ

< 

ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/background" 
    tools:context="pl.com.qiteq.zielonomocni_rework.HistoryActivity"> 

<LinearLayout 
     android:id="@+id/mainView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:padding="16dp"> 

<LinearLayout 
      android:id="@+id/historyView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 



     </LinearLayout> 

    </LinearLayout> 

</ScrollView> 

とJavaコードをfinnaly:(ループカウンタは、例えばある)

LinearLayout mainView = (LinearLayout) findViewById(R.id.historyView); 

      for (int i=0; i<=2; i++){ 
       View layout = View.inflate(this, R.layout.history_bar, null); 
       mainView.addView(layout); 
      } 
+0

であなたのTextViewsのそれぞれへの参照を持っているでしょう

List<TextView> textViews = new ArrayList<>(); LayoutInflater inflater = LayoutInflater.from(this); for (int i=0; i<=2; i++){ View layout = inflater.inflate(this, R.layout.history_bar, mainView, false); mainView.addView(layout); TextView textView = (TextView) layout.findViewById(R.id.text1); textViews.add(textView); } 

:次に、あなたのループの中で、あなたのような何かを行うことができますビューを膨らませる。そのビューのコンテナをViewGroupとして渡す必要があります。 – danypata

+0

私は次のようなことをしました: ViewGroup viewGroup =(ViewGroup)findViewById(R.id.historyView); しかし、私はアクティビティを開始することもできません。IllegalStateExceptionが発生しています。 "指定された子はすでに親を持っています。子の親で最初にremoveView()を呼び出さなければなりません。"、addViewメソッドと並んでいます – Qiteq

答えて

0

あなたのマージンがすべて無視される理由は、ここであなたのインフレータにヌルを渡していることです:

View layout = View.inflate(this, R.layout.history_bar, null); 

このようにすると、ビューのすべてのLayoutParamsが破棄されます。あなただけの各1にIDを与え、それぞれに異なるIDを設定する必要はありませんTextViewsにテキストを設定するには

View layout = inflater.inflate(this, R.layout.history_bar, mainView, false); 

:あなたはでそれを置き換える必要があります。あなたはその後、ときにあなたがのViewGroupとして `` `null```を渡すためだリスト

+0

しかし、 IllegalStateException? "指定された子にはすでに親があります。子ビューの親で最初にremoveView()を呼び出す必要があります。"、in mainView.addView(layout); – Qiteq

+0

例のコードを更新しました。これは、ビューの簡易メソッドではなく完全なLayoutInflaterを使用して、すぐにルートにアタッチしないようにしました。 – Jahnold

+0

私は家に帰るときにこれを試してみる – Qiteq

関連する問題