2016-05-15 7 views
0

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 Erstellen

ich 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> 
+2

'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. –

+0

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

Antwort

0

Bitte diesen Code versuchen.

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Create parent RelativeLayout 
     RelativeLayout relParent = new RelativeLayout(this); 
     RelativeLayout.LayoutParams relParentParam = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); 
     relParent.setLayoutParams(relParentParam); 

     // Create child ImageView 
     ImageView imgView = new ImageView(this); 
     RelativeLayout.LayoutParams imgViewParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     imgView.setLayoutParams(imgViewParams); 
     imgView.setImageResource(android.R.drawable.ic_menu_add); 
     imgViewParams.addRule(RelativeLayout.CENTER_IN_PARENT); 

     // Add child ImageView to parent RelativeLayout 
     relParent.addView(imgView); 

     // Set parent RelativeLayout to your screen 
     setContentView(relParent, relParentParam); 
    } 

} 
+0

Dies beantwortet die Frage nicht. Die Frage ist, eine benutzerdefinierte 'ViewGroup' zu erstellen, die von' WindowManager' verwendet wird. Es geht nicht darum, eine Aktivität zu erstellen. – CommonsWare

+0

Ok, aber Titel fragt nach Ansicht ohne XML – Harsh4789

+0

Antworten müssen die Frage zu beantworten, nicht nur PLZ im Zusammenhang mit dem Titel. – CommonsWare