2012-01-06 38 views
4

我按照以下方式覆蓋Activity類;擴展活動標題不以自定義樣式出現

public class MyCustomActivity extends Activity { 
... 
... 

} 

public class MyActivity extends MyCustomActivity { 
... 
... 

} 

而清單中的活動聲明就是這樣;

<activity 
    android:name=".MyCustomActivity" 
    android:label="@string/app_name" > 
</activity> 

<activity 
    android:name=".MyActivity" 
    android:label = "ChildActivity"> 

    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

我的問題是,在android:label="ChildActivity"在清單中定義的活動標題不與自定義樣式出現。我怎麼能使它在每個活動中都不需要撥打setTitle(charSeq);

編輯:

一件事(可怕的)我忘了提的是,我使用的自定義樣式在下面的方式;

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/CustomTheme" > 
... 
... 
</application> 

編輯(後@ Mudassir的答案): 我使用的自定義標題欄的內容編排如下;

<?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="50dip" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:gravity="left" 
     android:orientation="horizontal" > 

     <ImageView 
      android:id="@+id/imageViewIcon" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/vector_arts" 
      android:layout_marginLeft="-15dp" /> 

     <TextView 
      android:id="@+id/textTitleBar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
</RelativeLayout> 
+0

您是否將「ChildActivity」作爲標籤?如果是從MyActivity的activity標籤中移除標籤屬性。 – 2012-01-06 04:30:51

+0

你是否爲這兩個活動獲得相同的標題? – kosa 2012-01-06 04:34:34

+0

我沒有得到任何標題?我想實現默認行爲,即在我的清單文件中設置'android:label'屬性時,應該在不調用setTitle()方法的情況下設置該活動的標題。 – Khan 2012-01-06 04:39:57

回答

2

正如我理解你的問題,你正在使用文本視圖(自定義樣式)來顯示標題文本。因此,要在自定義標題欄(文本視圖)中顯示默認標題文本(在清單中定義的文本(在android:label中定義)),您必須覆蓋父項(MyCustomActivity)中的方法setTitle,如下所示;

@Override 
public void setTitle(CharSequence titleText) { 

    // Assuming you text view's name is titleTextView in the style XML file 
    TextView customTitle = (TextView) findViewById(R.id.titleTextView); 
    customTitle.setText(titleText); 
} 

然後從以下同類的onCreate()調用此方法;

setTitle(getTitle());

這將讓清單文件中定義的活動標籤,它(這裏customTitle)傳遞給方法setTitle()這將顯示它您的自定義標題欄是文本視圖。請注意,只有在使用文本視圖來顯示標題文本時,此方法纔有效。

+0

謝謝。它是我想要的。我忘了提及我正在使用的自定義樣式。再次感謝。 – Khan 2012-01-06 12:11:13

+0

請更新您的問題以包含樣式細節。 – Mudassir 2012-01-06 12:12:48

1

您正在啓動MyActivity,你必須設置ChildActivity作爲標題。 MyActivity是MyCustomActivity的子類。當你設置孩子班的標題時,它來到了前臺。您所看到的活動實際上是兒童活動而非家長。所以ChildActivity的標題顯示您

感謝 蘇尼爾·庫馬爾Sahoo

+0

請參閱最新的問題。 – Khan 2012-01-06 05:45:20

2

你得到你在活動標題清單文件中設置相同的標題。 如果你這樣做:

<activity android:name=".MyActivity" 
    android:label="ChildActivity" 
      > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".TestingMyAcivity"></activity> 

public class TestingMyAcivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

}

public class MyActivity extends TestingMyAcivity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
setContentView(R.layout.main_); 
} 

}

你在main_.xml文件的標題是 「ChildActivity」 和佈局。

+0

請參閱最新的問題。 – Khan 2012-01-06 05:44:56