2012-01-06 2 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); в каждом действии?

Edit:

Одна вещь (страшная вещь) я забыл упомянуть, что я использую пользовательский стиль следующим образом;

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

Edit (После того, как @ ответ Мудассир в): Обычай заголовка раскладка я использую, как указано ниже;

<?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. –

+0

Вы получаете одинаковое название для обеих видов деятельности? – kosa

+0

Я ничего не получаю от названия?Я хочу добиться поведения по умолчанию, то есть когда я устанавливаю атрибут 'android: label' в моем файле манифеста, заголовок этого действия должен быть установлен без вызова метода' setTitle() '. – Khan

ответ

2

Как я понял ваш вопрос, вы используете текстовое представление (пользовательский стиль), чтобы отобразить текст заголовка. Поэтому для отображения текста заголовка по умолчанию (определенного в манифесте на android:label) в пользовательской строке заголовка (текстовое представление) вы должны переопределить метод setTitle в своем родителе (MyCustomActivity), как указано ниже;

@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());

Это позволит получить метку активности, определенной в файле манифеста и передать его в метод setTitle() который покажет его на пользовательском строке заголовка, который вид текста (customTitle здесь). Обратите внимание, что этот подход будет работать, только если вы используете текстовое представление для отображения текста заголовка.

+0

Спасибо. Это то, что я хочу. Я забыл упомянуть о пользовательском стиле, который я использую. Еще раз спасибо. – Khan

+0

Пожалуйста, обновите свой вопрос, чтобы включить детали стиля. – Mudassir

1

Вы запускаете MyActivity где вы установили ChildActivity в качестве заголовка. MyActivity - это дочерний класс MyCustomActivity. Пока вы задали название дочернего класса, он вышел на передний план. Активность, которую вы видите, на самом деле является дочерней активностью, а не родительской. Так название ChildActivity показан вам

Благодаря Сунил Кумар Sahoo

+0

См. Обновленный вопрос. – Khan

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_); 
} 

}

вы получите титул "ChildActivity" и макет в main_.xml файле.

+0

См. Обновленный вопрос. – Khan

Смежные вопросы