2016-10-03 6 views
2

カスタムビュー「RowWrapperView」で、次の例のレイアウトを考える:カスタムビュー

(row_item.xml)

<?xml version="1.0" encoding="utf-8"?> 
<com.example.android.RowWrapperView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    ... > 
    <Button android:id="@+id/btn1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
    <Button android:id="@+id/btn2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
    <Button android:id="@+id/btn3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</com.example.android.RowWrapperView> 

ビューが膨張したレイアウトを持っている(view_row_wrapper .xmlの)ID "R.id.container" とのLinearLayout有する:

public class RowWrapperView extends RelativeLayout { 
    public RowWrapperView(Context context) { 
     super(context); 
     init(); 
    } 
    public RowWrapperView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 
    public RowWrapperView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    public LinearLayout container; 
    private void init() { 
     inflate(getContext(), R.layout.view_row_wrapper, this); 
     container = (LinearLayout) findViewById(R.id.container); 
    } 
} 

(view_row_wrapper.xml)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    ... > 
    <LinearLayout 
     android:id="@+id/something" 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 
     <Button android:id="@+id/test" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
     ... 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/container" 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 
     <!-- Trying to get the content of the view here --> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/something_else" 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 
     ... 
     <TextView 
      android:id="@+id/message_sender" 
      tools:text="Jon Snow" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
</LinearLayout> 

私がしようとしているのは、R.id.containerの(Row_item.xmlの) "RowWrapperView"の内容を取得することです。

何か不足していますか?

答えて

0

のInflaterのタイプを返す持っている - ビューを、あなたのレイアウトに追加する必要があり、このビューには、それがレイアウトに

private void init() { 
    View view = inflate(getContext(), R.layout.view_row_wrapper, this); 
    addView(view); 
    container = (LinearLayout) findViewById(R.id.container); 
} 
+0

これは、レイアウトビューR.layout.view_row_wrapperをカスタムビューで正しく膨張させます。しかし、R.id.containerのRowWrapperViewタグ(row_item.xml内)の内容を取得するにはどうすればよいですか? – Daniel

0

を追加することで、レイアウト

private void init() { 
    View view = inflate(getContext(), R.layout.view_row_wrapper, this); 
    container = (LinearLayout) view.findViewById(R.id.container); 
} 

またはこれにビューを追加することなく、これを試して 検索します私はあなたがこれを行うかもしれないと思います:

for (int i=0 ; i<getChildCount() ; i++) { 
      container.add(getChildAt(i)); 
     } 

エル。

+0

あなたはinit()の意味ですか? – Daniel

+0

はい、この方法では、要素を現在のビューではなくコンテナに設定するためです。 – alextfos

関連する問題