我一直在試圖從xml充滿視圖到它們相應的視圖對象,然後將這些視圖對象添加到編程的視圖組。但是,每當我調用myviewgroup.addView(childview)時,childview似乎都會丟失所有按鈕以及xml代碼應該給它的東西。但是,childview所具有的一件事就是我編寫的背景顏色,以確保兒童視圖具有正確的尺寸。該childview給出正確的尺寸,但沒有它的組件是可見的不能添加虛擬視圖到自定義視圖組
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);
上面的代碼只是設置我的屏幕爲藍色的背景,但沒有按鈕的顯示。另外,當我setContentView(mainmenu)一切都顯示從該XML代碼完美以及背景顏色。這個視圖組的重點是,我可以在任何多個視圖之間切換,而不管它們的順序爲childviews。
這裏是viewchanger的代碼。我希望它有7個子視圖,當我調用方法 setView(int v)我希望所有其他視圖都不見了,並且我只希望這一個視圖可見。
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);
}
}
}
當我加載在ViewChanger構造子視圖中,只有的ViewGroup顯示我的背景顏色的任何視圖的我經歷的setView設置(INT V),而不是按鈕。
這裏是主要的XML代碼,但所有的人看起來非常類似:
<?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>
ViewChanger從哪些方面繼承?如果它只是擴展了ViewGroup,它可能沒有預定義的繪圖代碼,並且如果你不提供任何代碼,它將不會繪製任何子代。另外,R.layout.main的內容是什麼? – Xono
我更新了問題,謝謝你的幫助 – Isaac