2013-04-22 33 views
0

對於我正在設計的應用程序,我們必須處理用戶的一些「特殊」需求。其中之一就是創建一個導航邊欄,它幾乎可以出現在所有的活動中。每個活動的邊欄

此導航欄必須始終包含三個與三個活動鏈接的按鈕:主頁,信息,配置。

這三個活動中的每一個都可以加載可以(或不能)包含此導航欄的其他活動。 這些按鈕中的每一個都必須重置當前活動堆棧狀態,從而將用戶選擇的相應活動置頂。

導航欄必須是可定製的(使其可見/不可見),我還想停用某些按鈕。

編輯:它必須類似於抽屜,但按鈕必須是高度可定製的(在大小和外觀),它必須始終打開(無滑動功能)。

什麼是實現這一目標的最佳方式,而無需在每個佈局中手動包含這些按鈕?

回答

2

您可以手動創建此佈局,但只能使用一次 - 在您的ActivityBase類中。其他活動可以擴展這個基類。

編輯:

正如我說過的,我提高了我的答案。 所以我的想法是用菜單創建一個Activity。如果其他Activity需要相同的菜單,它可以擴展此ActivityBase並添加它自己的佈局。 讓我們看一個簡單的例子。

ActivityBase佈局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <RelativeLayout 
     android:id="@+id/menu" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:background="@android:color/black" > 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:text="Button" /> 

     <Button 
      android:id="@+id/button2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@+id/button1" 
      android:layout_centerHorizontal="true" 
      android:text="Button" /> 

     <Button 
      android:id="@+id/button3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBaseline="@+id/button2" 
      android:layout_alignBottom="@+id/button2" 
      android:layout_alignParentRight="true" 
      android:text="Button" /> 
    </RelativeLayout> 

    <RelativeLayout 
     android:id="@+id/container" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/menu" > 
    </RelativeLayout> 

</RelativeLayout> 

正如你可以看到我創建了一個簡單的佈局,包含菜單欄容器佈局從將要延長AcivityBase活動。

現在ActivityBase

public class ActivityBase extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_base); 
    } 


} 

這是一個簡單Activity,但如果你願意,你也可以在這裏舉行菜單事件處理,如果他們是爲將要擴展這個活動是相同的。

現在讓我們在SecondActivity's佈局看:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

</LinearLayout> 

這是一個正常的佈局,沒有什麼特別的。爲了這個例子,我在那裏放了一些控件。

而且SecondActivity類:

public class SecondActivity extends MainActivity { 


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

     LayoutInflater inflater = getLayoutInflater(); 

     inflater.inflate(R.layout.second_activity, (ViewGroup) findViewById(R.id.container)); 
    } 


} 

它擴展ActivityBase,什麼是重要的 - 它通話setContentView。相反,我們正在創建LayoutInflater,並且我們在佈局中創建的container中佈局second_activity

+0

好的。那麼我可以使用這個佈局作爲我的其他活動的基礎? 您是否介意包含一個小示例或包含示例的一個資源的鏈接? (_As輔助信息:_我已經擴展了'Activity'類來創建一個定製的MyActivity,其中包含我的應用程序的每個屏幕中需要的一些實用程序。 – 2dvisio 2013-04-22 10:30:29

+0

在這裏你有一個簡單的例子:http://sendfile.pl/307288/ActivityEx.zip – 2013-04-22 10:53:44

+0

非常感謝檔案。我正在考慮更多關於其他人可能會覺得有用的幾行或一篇博客文章。 該鏈接是否會過期? – 2dvisio 2013-04-22 11:01:20