Ich versuche, eine benutzerdefinierte Ansicht ohne xml esIst es möglich, Ansichten ohne XML in Android zu erstellen?
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) {
}
}
Und in 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);
Aber die LayoutParams nicht funktioniert, es angezeigt
nichts zum Erstellenich dieses onLayout- verwenden muß um es anzuzeigen, und das Basislayout ist nicht MATCH_PARENT und Symbol ist nicht 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);
}
Ich habe auch versucht Icon-Layout hinzuzufügen, aber die App
base.addView(icon);
Ist es möglich, dieses Layout ohne hard erstellen die Größe und die Position zum Absturz bringen?
Ich habe RelativeLayout.LayoutParams überprüft, aber ich kann keine Methode finden, um es centerInParent auf True zu setzen.
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' sind nicht für' View's innerhalb einer 'Activity'. Ich bin mir nicht sicher, was Sie genau machen wollen, aber wenn Sie Ihr benutzerdefiniertes 'View' als ganzes Layout haben wollen, rufen Sie' setContentView() 'damit auf. Andernfalls fügen Sie es zu einer 'ViewGroup' hinzu, die sich im' Activity'-Layout befindet. Zum Zentrieren mit 'RelativeLayout.LayoutParams' suchen Sie die' addRule() 'Methode. –
Auch "ViewGroup" weiß nichts über die Anordnung seiner Kinder. Entweder implementieren Sie den Rest des Codes für eine benutzerdefinierte 'ViewGroup' (z. B. füllen Sie die leere' onLayout() 'Methode aus) oder erweitern Sie eine andere Klasse mit bestimmten Layoutregeln (z. B.' RelativeLayout' erweitern statt zu umbrechen) 'RelativeLayout'). – CommonsWare