활동 제목이 아닌 실행기에 다른 레이블을 설정하는 방법은 무엇입니까?


269

이 질문은 이전에 요청되었지만 전혀 만족스러운 답변이 없습니다! 다시 시도하고 있습니다.

응용 프로그램 시작 관리자 아이콘 (시작 화면에 표시되는 아이콘)에 다른 짧은 캡션을 제공하고 싶습니다. 런처는 mainfest 섹션에서 주요 활동 레이블에 대한 레이블을 다음과 같이 가져옵니다.

<activity android:name="MainActivity" android:label="@string/app_short_name">
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

이미 내 앱 이름 @ string / app_name에 대한 원래 참조를 다른 짧은 문자열 리소스로 변경했습니다.

BUT-big BUT : 물론이 활동의 ​​기본 제목을 변경합니다! 그리고 나는 그런 일이 일어나지 않기를 원했습니다. 긴 응용 프로그램 이름을위한 충분한 공간이 있습니다! onCreatesetTitle(int)방법 을 사용하여 긴 제목을 다시 설정해도 짧은 이름은 짧은 시간 동안 사용자에게 표시되지만 알아볼 수있을만큼 길기 때문에 좋지 않습니다!

그리고-사용자 정의 제목 표시 줄을 참조하여 내 질문에 대답하지 마십시오 ... 나는 바보 같은 문자열 제목 때문에 먼 길을 가고 싶지 않습니다! 효과가 거의없는 사용자 지정 제목 표시 줄을 그리는 것은 고통입니다!

거기에 없습니다 쉬운 방법 단지 런처를 디스플레이에 다른 문자열을 얻었다는? 답변 주셔서 감사합니다!

편집 : 사용자 정의 제목 표시 줄이 고통스러운 또 다른 이유는 기본 제목 표시 줄처럼 보이지 않기 때문에 각 장치에서 똑같이 보이도록 작업을 명시 적으로 수행해야합니다! 그리고 나는 다른 모습을 원하지 않는다면 해결책이 될 수 없습니다!

답변:


470

분명히 <intent-filter>레이블 속성을 가질 수 있습니다. 레이블이 없으면 레이블은 상위 컴포넌트 (활동 또는 애플리케이션)에서 상속됩니다. 따라서이를 사용하여 시작 프로그램 아이콘의 레이블을 설정할 수 있으며 자체 제목의 활동을 계속 유지할 수 있습니다.

이것은 에뮬레이터에서 작동하지만 사용되는 실행기 구현에 따라 다르므로 실제 장치에서는 작동하지 않을 수 있습니다.

http://developer.android.com/guide/topics/manifest/intent-filter-element.html

<activity
  android:name=".ui.HomeActivity"
  android:label="@string/title_home_activity"
  android:icon="@drawable/icon">
  <intent-filter android:label="@string/app_name">
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

참고 : <intent-filter>는 icon 속성을 가질 수도 있지만 , 액티비티에 지정된 아이콘을 무시할 수는 없습니다 . 활동에 지정된 아이콘 및 로고를 사용하는 SDK 11+에서 기본 ActionBar를 사용하려는 경우이 기능이 중요 할 수 있습니다.

추가 된 정보 : 레이블이 응용 프로그램이 아닌 활동에서 상속됩니다.

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"       
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".StartActivity"
            android:label="@string/app_long_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

이 경우 위에서 언급 한 것처럼 레이블을 넣지 않으면 app_long_name이 실행기 아이콘과 함께 표시됩니다.


5
Gee, 대단해 !! 오늘 밤에해볼 게요. 와우, 왜 그런 일이 제대로 기록되어 있지 않습니까? 나는 왜이 이상한 XML 구조를 좋아하지 않는지 안다 ... ;-)
Zordid

13
아냐 아냐 지금 실망했다. 순수한 안드로이드 런처 (에뮬레이터에서!)는 여기서 논의한 내용을 실제로 수행하지만 HTC의 런처는 의도의 레이블 태그를 무시합니다. :-( 허니 콤이 장착 된 Asus Eee Pad도 해당 라벨을 준수하지 않습니다.
Zordid

2
그래서 당신이보고있는 것은 활동 레이블입니까? 부끄러운 일입니다. 나는 이것이 문서화되지 않았기 때문에 발사기를 작성하는 사람은 아마도 올바른 행동을 구현하지 않을 것이라고 기대했습니다.
Mark Renouf

12
내 진저 브레드 넥서스 원, 넥서스 S뿐만 아니라 "최신"릴리즈에서 작동 :-) 슬프게도, 불일치에 대해서는 이것을 사용하지 않는 것이 좋습니다. 경고로 답변을 업데이트하는 경향이 있습니다.
Mark Renouf

3
나는 왜 지구상에서 이것이 많은 투표를했는지 전혀 모른다. 사람들이 무언가가 작동한다고 가정하기 전에 실제 장치에서 코드를 먼저 테스트하지 않습니까? 다른 사람들이 언급 했듯이이 솔루션은 실제 장치에서 작동하지 않습니다. 나는 4 개의 장치 (바닐라 및 비 바닐라 안드로이드)에서 아무것도 테스트하지 않았습니다. 이것은 에뮬레이터에서만 작동합니다. 내가 찾은 유일한 방법은 Anila의 답변에 설명 된대로 setTitle을 사용하는 것입니다.
Tiago

35

나는 똑같은 것을 찾고 있었고 여기 나를 위해 일한 것이 있습니다.

<activity android:name="MainActivity" android:label="@string/app_short_name">
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

응용 프로그램 실행기 아이콘의 이름이 짧습니다.

응용 프로그램 표시 줄에 더 큰 이름을 추가하려면 다음을 추가하면됩니다.

this.setTitle(getResources().getString(R.string.app_name));

주요 활동 자바 파일에.


런처 활동에서 제목을 변경해야하는 경우에 반드시 작동합니다. 그러나 아이콘 이름이 약 1 초 동안 깜박입니다.
rphello101

2
당신이 빈 액션 바 짧게 (전혀 즉, 타이틀 없음)을 보여주는 응용 프로그램을 꺼리지 않는 경우에 당신은 당신의 액션 바 스타일 및 삭제 변경할 수 showTitle로부터를 displayOptions. 그런 다음 다음 onCreate과 같이 활동에서 제목을 켤 수 있습니다 . this.getActionBar (). setDisplayOptions (ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); 아이콘 이름이 깜박이는 것보다 낫지 만, 필요한 경우 응용 프로그램의 모든 활동에서 제목을 켜야합니다.
BruceHill

런처 활동에서 제목을 변경해야하는 경우에 반드시 작동합니다.

왜 안돼 setTitle(R.string.app_name);?
arekolek

10

Mark Renouf의 솔루션이 나에게 실패합니다 (Nexus 4 및 Android 4.4 사용). 바로 가기를 사용하면 실패하고 바로 가기는 앱 이름 대신 기본 활동 레이블을 사용합니다. Gmail 및 Google Keep과 같은 일부 앱이 제대로 작동하는 것을 보았습니다. 그러나 열면 제목이 비어 있고 제목이 나타납니다 (setTitle ()을 사용하여 제목을 설정하기 전에 앱 이름이 깜박이는 것보다 낫습니다).

내가 찾은 최고의 솔루션 은 다음 같습니다.

ActionBar에 제목 / 라벨이 표시되지 않는 스타일을 만듭니다.

<style name="NoActionBarTitle" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/NoActionBarTitle.ActionBar</item>
</style>

<style name="NoActionBarTitle.ActionBar" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:displayOptions">showHome|useLogo</item>
</style>

탐색 창을 사용하고 로고를 사용하고 있습니다 (앱에 로고와 아이콘을 사용하기 때문). showTitle을 사용하지 않고 무엇이든 사용할 수 있습니다 . 그런 다음 AndroidManifest.xml에서 MainActivity에 대한 테마를 설정하십시오.

<activity
    android:name="com.xx.xxx.MainActivity"
    android:logo="@drawable/ic_icon_padding"
    android:theme="@style/NoActionBarTitle">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

그런 다음 MainActivity의 onCreate () 메소드에서 작업 표시 줄의 제목을 설정하십시오.

getActionBar().setTitle(R.string.your_title);

그 후 는 다음을 호출 할 수 있습니다.

getActionBar().setDisplayShowTitleEnabled(true);

까다 롭지 만 가치가 있습니다.


4

이것은 아마도 당신이하고 싶은 일을 만족시키지 못할 것이지만, 아주 짧게 표시되는 스플래시 화면을 만드는 것에 대해 생각한 적이 있습니까 (기본 제목으로) 그런 다음 setTitle(int)방법을 사용하여 선택한 제목으로 새로운 실제 "주"활동을 시작하십시오 ? 나는 그것이 효과가 있는지 확인하기 위해 이것을 시도하지는 않았지만 그것이 당신이 달성하려는 것의 덜 원활한 성격을 보여주지 않는 즐거운 일을 만들 수 있습니다.


2

이 방법을 통해 Support / Appcompat Toolbar를 사용하는 모든 사람 setSupportActionBar()은 활동 제목을 툴바 XML에서 설정할 수 있습니다.

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    app:title="@string/activity_title"
    ...
/>

매니페스트에 설정된 응용 프로그램 및 활동 레이블을 재정의합니다.

android.support.v7.widget.Toolbar


1

나는이 문제에 대한 해결 방법을 찾을

에서 manifest.xml

당신의 쓰기 응용 프로그램의 이름을 에서 android:label실행 (주) 활동 .

이렇게하면 기본 활동의 레이블이 앱 레이블의 레이블과 동일하게됩니다.

그런 다음 Launcher (main) 활동onCreate()함수 에서이 문장을 작성하십시오.

if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle("main activity label");
        }

여기에 Launcher (main) 활동에 제공하려는 레이블을 작성하십시오.


0

다음과 같이 할 수 있습니다 :

public class FooBar extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // change title
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
    }
}

제목을 담을 사용자 정의 레이아웃을 만들어야합니다. 다음과 같이 간단 할 수 있습니다 my_title.xml.

<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="foo bar"/>

당신의에서 AndroidManifest.xml파일을 그냥 실행 아이콘에 표시하기 위해 무슨 일있는 앱의 제목을 설정해야합니다. 활동을 위해 제목을 설정할 필요가 없습니다.


1
그게 정말 사실 의심 : 응용 프로그램의 레이블이 없는 런처의 정의 어떤 라벨을-는 단순히 응용 프로그램 (설정 -> 응용 프로그램 -> 응용 프로그램을 관리) 설치된 앱의 목록에 이름을하는 방법을 정의하고이 라벨은 또한 안드로이드에 의해 촬영 시장도. 그래서 나는 그것을 바꾸고 싶지 않습니다. 실험을 통해 런처가 수행하는 활동의 제목임을 알았습니다. 그 외에도 : 귀하의 솔루션에는 원하지 않는 cutsom 제목이 포함됩니다! 이것은 기본 제목 표시 줄처럼 보이지 않습니다. 또는 기본 동작을 얻으려면 많은 일을해야합니다.
Zordid

흠 ... 훨씬 더 나빠요. 방금 해결책을 시도했습니다. 그러나 제목 표시 줄은 기본값처럼 보이지 않으며 사용자 지정 제목 표시 줄이 나타나기 직전에 기본 제목 표시 줄 (보고 싶지 않은 짧은 이름을 표시)이 표시됩니다. 따라서이 솔루션은을 사용하여 제목을 설정하는 것과 같습니다 setTitle. :-(
Zordid

0

실행기는 실제로 선언하는 활동에 대한 android : label 및 android : icon을 표시합니다.

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

따라서 응용 프로그램 레이블은 사용되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.