MyLinearLayout
サブクラス extends がViewGroup
あり、その中View
に s が自動ラップされます。
public class MyLinearLayout extends ViewGroup {
private final int cellHeight = 70;
public MyLinearLayout (Context context, AttributeSet attrs) {
super (context, attrs);
}
@Override
protected void onLayout (boolean changed, int l, int t, int r, int b) {
int left = 40;
int top = 20;
int count = getChildCount ();
int remainingWidth = 0;
for (int j = 0; j < count; j++) {
View childView = getChildAt (j);
int w = childView.getMeasuredWidth ();
int h = childView.getMeasuredHeight ();
if (left != 40 && remainingWidth < w)
{
left = 40;
top += (cellHeight + 20);
}
childView.layout (left, top, left + w, top + h);
remainingWidth = r - l - left - w - 80;
left += (w + 40);
}
}
@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
int cellWidthSpec = MeasureSpec.makeMeasureSpec (0,
MeasureSpec.UNSPECIFIED);
int cellHeightSpec = MeasureSpec.makeMeasureSpec (cellHeight,
MeasureSpec.EXACTLY);
int count = getChildCount ();
for (int i = 0; i < count; i++) {
View childView = getChildAt (i);
childView.measure (cellWidthSpec, cellHeightSpec);
}
setMeasuredDimension (resolveSize (0, widthMeasureSpec),
resolveSize (cellHeight * count, heightMeasureSpec));
}
public void removeChildViews (ViewGroup rootView) { // not work
View child;
if (rootView == null) {
rootView = this;
}
int count = rootView.getChildCount ();
Log.i ("--->", count + " start");
for(int i = 0; i < count; i++) {
child = rootView.getChildAt(i);
Log.i ("--->", rootView.getClass ().toString () + " ROOT");
Log.i ("--->", child.getClass ().toString () + " CHILD");
if(child instanceof ViewGroup) {
removeChildViews ((ViewGroup) child);
} else if (child != null) {
rootView.removeView (child);
}
}
Log.i ("--->", rootView.getChildCount () + " end");
}
}
レイアウトファイルで宣言します:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/input_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
...
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal" >
...
<com.test.MyLinearLayout
android:id="@+id/llayout_autobreak"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.test.MyLinearLayout>
</LinearLayout>
...
</LinearLayout>
そしてそれを私の中で使用してActivity
ください:
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.layout_input);
...
ll_ab = (MyLinearLayout) findViewById (R.id.llayout_autobreak);
spinner.setOnItemSelectedListener (new OnItemSelectedListener () {
@Override
public void onItemSelected (AdapterView <?> parent,
View view, int position, long id) {
ll_ab.removeChildViews(null); // not work
...
...
}
@Override
public void onNothingSelected (AdapterView <?> parent) {
}
});
...
}
私のll_ab
レイアウトには、、、などのActivity
さまざまな が含まれている可能性があります。それらを動的にレイアウトに追加でき、うまく機能します。ただし、それらを一連の新しいsに置き換えようとすると、 は削除されるだけで、他の s は削除されないようです。も使用しようとしますが、機能しません。では、内部のすべてのビューを削除する方法は? 助けてくれてありがとう。View
TextView
EditView
Spinner
ll_ab
View
removeChildViews (ViewGroup)
MyLinearLayout
TextView
removeAllViews()
ll_ab