は、私は、XMLAndroidでxmlのないビューを作成することはできますか?それは私がこのonLayoutを使用する必要があります</p> <p>何も表示されない、
public class MyView extends ViewGroup {
public MyView (Context context) {
super(context);
setBackgroundColor(0xffff0000);
RelativeLayout base = new RelativeLayout(context);
RelativeLayout.LayoutParams rP = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
base.setBackgroundColor(0xff00ff00);
base.setLayoutParams(rP);
RelativeLayout.LayoutParams iP = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
ImageView icon = new ImageView(context);
icon.setBackgroundResource(android.R.drawable.ic_menu_add);
icon.setLayoutParams(iP);
addView(icon);
addView(base);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
}
}
せずにカスタムビューを作成し、actitvy
MyView myview = new MyView(this);
WindowManager.LayoutParams baseParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
addContentView(myview, baseParams);
でそれを使用しようとしています。しかしLayoutParamsは動作しません。それを表示させるために、基本レイアウトはMATCH_PARENTではなく、アイコンはWRAP_CONTENTではありません
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
final View child = getChildAt(0);
final View child2 = getChildAt(1);
child.layout(0, 0, 300, 300);
child2.layout(0, 0, 300, 300);
}
私はまた、レイアウトにアイコンを追加しようとしましたが、このアプリは
base.addView(icon);
はサイズと位置をハードコーディングせずに、このレイアウトを作成することが可能ですクラッシュしますか?
RelativeLayout.LayoutParamsをチェックしましたが、centerInParentをtrueに設定するメソッドが見つかりませんでした。
http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_menu_add"
android:layout_centerInParent="true"
/>
</RelativeLayout>
'WindowManager.LayoutParams'は、' Activity'内の 'View'のためのものではありません。私はあなたが何をしようとしているのかよく分かりませんが、カスタムの 'View'をレイアウト全体として使いたい場合は' setContentView() 'を呼び出してください。それ以外の場合は、 'Activity'のレイアウトにある' ViewGroup'に追加してください。 'RelativeLayout.LayoutParams'を中心に、あなたは' addRule() 'メソッドを探しています。 –
また、 'ViewGroup'はその子をレイアウトすることについて何も知らない。実際には、カスタムの 'ViewGroup'のコードの残りの部分を実装するか(空の' onLayout() 'メソッドを埋め込むなど)、または特定のレイアウトルールを持つ他のクラスを拡張します(例えば、ラップしようとするのではなく' RelativeLayout'を拡張します'RelativeLayout')。 – CommonsWare