hinzufügen nicht aufgeblasenen Blick auf custom viewgroup
Ich habe versucht, Sie aufzublasen Ansichten von xml, um Ihre entsprechenden Objekte anzeigen, dann fügen Sie diese Objekte anzeigen, die der programmierten viewgroup. Aber immer, wenn ich rufe myviewgroup.addView(childview), die childview zu verlieren scheint alle Tasten und Dinge, die der xml-code sollte es gegeben haben. Aber die eine Sache, die childview nicht haben, ist die hintergrund-Farbe, die ich programmiert, um sicherzustellen, die childview hatte die richtigen Maße. Die childview gegeben ist, die richtigen Maße, aber keiner seiner Komponenten sichtbar sind
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
viewchanger= new ViewChanger(this); //my viewgroup
View mainmenu= inflater.inflate(R.layout.main, null); //the xml code
mainmenu.setBackgroundColor(Color.rgb(0, 0, 255));
viewchanger.addView(mainmenu);
setContentView(viewchanger);
der obige code stellt einfach den hintergrund von meinem Bildschirm zu blau, aber keine der Tasten nach oben zeigen. auch, wenn ich setContentView(mainmenu) alles zeigt sich aus, dass xml-code perfekt sowie die hintergrund-Farbe. Der Punkt dieses viewgroup ist, so kann ich wechseln zwischen mehreren Ansichten-unabhängig von der Reihenfolge, wie childviews.
Hier ist der code für viewchanger. Ich will es haben 7 untergeordneten Ansichten, und wenn ich eine Methode aufrufen
setView(int v) ich möchte, dass alle anderen Ansichten gegangen zu sein, und ich will nur, dass man anzeigen zu sehen sein.
public class ViewChanger extends ViewGroup{
/**Represent which view to show, only one can show at a time*/
public static final int MainMenu=0, ChooseMap=1, MapOptions=2,
SetLocation=3, view=4, EditMap=5, CreateMap=6;
private int current; //the current view
private View[] views= new View[7];
public ViewChanger(Context context) {
super(context);
//load 7 views into view array here
//LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
/*views[0]= inflater.inflate(R.layout.main, null);
* views[1]= inflater.inflate(R.layout.choose, null);
* views[2]= inflater.inflate(R.layout.mapoptions, null);
* views[0].setBackgroundColor(Color.rgb(255, 0, 0));
* views[1].setBackgroundColor(Color.rgb(255, 255, 0));
* views[2].setBackgroundColor(Color.rgb(0, 255, 0));*/
* addView(views[0]);
* addView(views[1]);
* addView(views[2]);
* this is how i want to load the childviews*/
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
for(int i = 0; i < getChildCount(); i++){
getChildAt(i).layout(0, 0, getWidth(), getHeight());
}
}
/**Sets the view of the view group, only one view can be viewed at a time*/
public void setView(int v){
current=v;
for (int i=0; i<views.length; i++){
if (v==i){
views[i].setVisibility(View.VISIBLE);
} else{
views[i].setVisibility(View.GONE);
}
}
}
Wenn ich Sie laden das Kind, Blick in die ViewChanger Konstruktor, der viewgroup nur zeigt mir die Farben im hintergrund, welcher Ansicht ich durch setView(int v), und nicht die Tasten.
Hier ist der xml-code für Haupt -, aber alle anderen sehen sehr ähnlich wie diese:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="The title"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/welcome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Welcome [...]"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/load"
android:layout_width="122dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Load Map" />
<Button
android:id="@+id/create"
android:layout_width="122dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Create Map" />
<Button
android:id="@+id/users"
android:layout_width="122dp"
android:layout_height="wrap_content"
android:text="Other User" />
</LinearLayout>
- Was bedeutet ViewChanger Erben aus? Wenn es nur reicht ViewGroup, es wird wahrscheinlich keine vordefinierten Zeichnung code und stellen Sie keine, wird es nicht ziehen, keine Kinder. Auch, was ist der Inhalt von R. layout.main?
- ich aktualisierte die Frage, danke für jede Hilfe
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach dem ausführen geistig durch alles, was ich denken konnte, habe ich mir eine dummy-Projekt identisch zum check-out ein paar der Möglichkeiten. Für einige Grund, dass ViewChanger erstrecken sich von FrameLayout statt ViewGroup macht diese Arbeit - wahrscheinlich, weil ViewGroup fehlt etwas notwendig zu machen, es ' s child-views (ich habe versucht, überschreiben von onDraw, aber es funktioniert immer noch nicht). Da Sie nur zeigt ein Blick auf eine Zeit - die übliche Nutzung von FrameLayout - ich würde empfehlen, nur eine solche änderung; es ist wahrscheinlich viel einfacher als das isolieren und beheben die fehlende Funktionalität zeichnen in der ViewGroup.
sollte die einzige änderung, die Sie vornehmen müssen, um die original-design (hinzufügen von Ansichten aus dem Konstruktor), um richtig zu arbeiten.
Ich hatte das gleiche problem, hat eine eigene viewGroup und innen habe ich ein linear layout-viewGroup, und ich konnte nicht sehen, das linear-layout-Inhalt.
Ich habe das problem gelöst, das hinzufügen folgenden code in meine custom ViewGroup:-
Überprüfen Sie die FrameLayout-Anweisung. Hoffe, es funktioniert.