Название расширенной активности не отображается с пользовательским стилем - PullRequest
4 голосов
/ 06 января 2012

Я переопределяю класс 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>

Редактировать (после ответа @ Мудасира): Используемый мной макет строки заголовка приведен ниже;

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

Ответы [ 3 ]

2 голосов
/ 06 января 2012

Вы получите тот же заголовок, что и в файле манифеста в заголовке действия. если вы делаете это так:

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

2 голосов
/ 06 января 2012

Как я понял ваш вопрос, вы используете текстовое представление (пользовательский стиль) для отображения текста заголовка.Таким образом, чтобы показать текст заголовка по умолчанию (определенный в манифесте 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(), который будет отображаться в вашей пользовательской строке заголовка, в которой есть текстовое представление (здесь можно указать название).Обратите внимание, что этот подход будет работать, только если вы используете текстовое представление для отображения текста заголовка.

1 голос
/ 06 января 2012

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

Спасибо Сунил Кумар Саху

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...