2010-10-07 47 views
4

我的問題是我有一個主屏幕,我想用按鈕單擊動態產生一個視圖,然後將主視圖從屏幕上滑開它下面的視圖。我已經完成了這一點,但我覺得有一個更好的方法。我做這件事的方式非常有限,因爲你不能一次又一次地在主體下產生視圖。Android:在視圖下膨脹視圖,然後將頂部視圖關閉

我主要的XML文件看起來像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
    <RelativeLayout 
    android:id="@+id/subpage" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    </RelativeLayout> 
    <RelativeLayout 
    android:id="@+id/homescreen" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@drawable/homebg" 
     > 
    </RelativeLayout> 
    </RelativeLayout> 
</RelativeLayout> 

我已經刪除了一些不必要的東西。這是重要的。注意主佈局的第一個孩子是一個ID爲「subpage」的相對佈局。因爲我使用java來在點擊一個按鈕時將另一個佈局充填到子頁面佈局中,然後我將屏幕上的「主屏幕」佈局設置爲動畫。似乎我不應該預先聲明子頁面。我想我的問題是,有沒有辦法在現有佈局下動態聲明新的子佈局?

============================================== =========================

編輯:問題的第2部分

我試圖使用addView和應用程序崩潰。這是我用來嘗試添加視圖並將我的xml充入其中的代碼。在下面的代碼是一個ViewGroup,因爲據我所知,你只能膨脹到ViewGroups,而不是普通的意見。此外,「活動」在課程頂部定義爲「私人活動活動=此」。任何想法可能導致崩潰?

btnHelp.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      subView = (ViewGroup)new View(getApplicationContext()); 
      mainScreen.addView(subView,1); 
      LayoutInflater inflater = activity.getLayoutInflater(); 
      inflater.inflate(R.layout.help, subView); 
     } 
    }); 

=========================================== ============================

編輯:問題

因此多了一個問題的第3部分。一切工作都很好,只要膨脹和滑落。但是,膨脹的視圖中有一個按鈕。我試圖給該按鈕分配一個監聽器,但它似乎不起作用。我通過在我一直在研究的btnHelp中調用佈局充填器後將偵聽器添加到按鈕來完成此操作。下面的代碼:

btnHelp.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      LayoutInflater inflater = activity.getLayoutInflater(); 
      mainScreen.addView(inflater.inflate(R.layout.help, null),0); 
      homeScrn.startAnimation(slideLeftOut); 
      btnBackHome = (ImageView)findViewById(R.id.backMenuBtn); 
      btnBackHome.setOnClickListener(goHome); 

     } 
    }); 

GOHOME是我已經低於此定義爲這樣的處理程序:

private OnClickListener goHome = new OnClickListener(){ 
    public void onClick(View v) { 
     Log.d("ClickEvent: ","btnBackHome Clicked"); 
     homeScrn.startAnimation(slideRightIn); 
    } 
}; 

當我點擊通過btnBackHome引用的按鈕,它不會做任何事情。我只是不確定是否因爲監聽器實際上沒有被分配,什麼是保持實際被點擊的按鈕或其他東西。在RelativeLayout

回答

2

呼叫addView()兒童添加到它,其中,所述孩子要麼充氣(getLayoutInflater().inflate()),或直接在Java中構成。

另外,考慮到它按照您的要求進行操作(從孩子到孩子的動畫過渡,在穩定狀態下每次只能看到一個孩子),也許會考慮使用ViewFlipper

+0

我會試試看。 ViewFlipper不是我想要的。它有一個視圖滑落,而另一個視圖同時滑動。我期待從第二個視圖的頂部關閉一個View,基本上做一個揭示。 – LoneWolfPR 2010-10-08 13:28:32

+0

@LoneWolfPR:啊,對不起,我對'ViewFlipper'建議的錯誤。 – CommonsWare 2010-10-08 14:00:06

+0

我正在嘗試添加視圖,但它給我帶來了問題。你可以看看我對原始文章所做的修改,看看有沒有什麼可以看到它的錯誤?謝謝。 – LoneWolfPR 2010-10-08 15:04:04

0

開始一個新的活動時的默認動畫是一個滑動動畫..爲什麼不把你的「主屏幕」和「子頁面」分成2個不同的XML文件和2個活動?

+0

這不是正確的幻燈片,活動之間的轉換很難控制。此外,它只是一個單一的屏幕。沒有真正的需要爲它開展一項活動。 – LoneWolfPR 2010-10-08 15:05:44