Activity.setActionBar

Activity.setActionBarは、アクションバーとして"Toolbar"をセットする。

Activity  |  Android Developers

styles.xmlで、

Theme.Material.NoActionBarにしておく。
activity_main.xmlは、

LinearLayoutの中にToolbarとTextView。
"?android:attr/actionBarSize"という感じで、"android"を付けないと落ちるので注意。
MainActivity.javaは、

package com.bgstation0.android.sample.activity_;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toolbar;

public class MainActivity extends /*AppCompatActivity*/ Activity {

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

}

まずこれだけにする。

これでもアクションバーとしてのToolbarは表示される
これでもアクションバーとしてのToolbarは表示される

これでもアクションバーとしてのToolbarは表示される。
タイトルが何にもないけど。

toolbar1をセットすると、

app_nameかな。これは。
app_nameかな。これは。

app_nameかな。これは。
タイトルが付く。

Sample/android/Activity/setActionBar/Activity_ at master · bg1bgst333/Sample · GitHub

ActionBar.setSubtitle

ActionBar.setSubtitleで、サブタイトルをセットする。

ActionBar  |  Android Developers

strings.xmlで、

"Sub Title"をサブタイトルとする。
MainActivity.javaで、

とすると、

"Sub Title"が下にセットされる
"Sub Title"が下にセットされる

"Sub Title"が下にセットされる。

Sample/android/ActionBar/setSubtitle/src/ActionBar at master · bg1bgst333/Sample · GitHub

ActionBar.setTitle

ActionBar.setTitleで、タイトルをセットする。

ActionBar  |  Android Developers

resのdrawable-xhdpiの下に、

icon1とlogo1を配置
icon1とlogo1を配置

icon1とlogo1を配置。
MainActivity.javaは、

package com.bgstation0.android.sample.actionbar_;

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // アイコン, ロゴ, タイトルのセット.
        ActionBar actionBar = getActionBar();	// actionBarを取得.
        actionBar.setIcon(R.drawable.icon1);	// icon1をセット.
        
    }
    
}

まずはアイコンだけ。

icon1が表示される
icon1が表示される

icon1が表示される。

package com.bgstation0.android.sample.actionbar_;

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // アイコン, ロゴ, タイトルのセット.
        ActionBar actionBar = getActionBar();	// actionBarを取得.
        actionBar.setIcon(R.drawable.icon1);	// icon1をセット.
        actionBar.setLogo(R.drawable.logo1);	// logo1をセット.
        
    }
    
}

次はロゴ。

logo1になった
logo1になった

logo1になった。
最後に、strings.xml

こうして、MainActivity.javaは、

という感じでタイトルに"Main Title"をセット。

"Main Title"になった
"Main Title"になった

"Main Title"になった。

Sample/android/ActionBar/setTitle/src/ActionBar at master · bg1bgst333/Sample · GitHub

R.attr.label(application)

applicationタグからandroid:labelを剥がしたらどうなるか検証。

R.attr  |  Android Developers

まずは、

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bgstation0.android.sample.r.attr_"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="15" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/main_title" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SubActivity"
            android:label="@string/second_title"
            android:logo="@drawable/ic_launcher" >
        </activity>
        <activity android:name=".ThirdActivity"
            android:label="@string/third_title"
            android:icon="@drawable/ic_launcher">
        </activity>
    </application>

</manifest>

appicationタグだけ剥がす。
Activityには付けておく。

Mainは大丈夫
Mainは大丈夫

Mainは大丈夫。

Subも大丈夫
Subも大丈夫

Subも大丈夫。

Thirdも大丈夫
Thirdも大丈夫

Thirdも大丈夫。
まあ、Activityに全部付けてるから問題ない。
次は、

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bgstation0.android.sample.r.attr_"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="15" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/main_title" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SubActivity"
            android:logo="@drawable/ic_launcher" >
        </activity>
        <activity android:name=".ThirdActivity"
            android:label="@string/third_title"
            android:icon="@drawable/ic_launcher">
        </activity>
    </application>

</manifest>

Subも剥がすと、

Subだけパッケージ名も含めたフルネームになる
Subだけパッケージ名も含めたフルネームになる

Subだけパッケージ名も含めたフルネームになる。
labelが無かったら、クラスのフルネームになるようになってるのかな。
最後は、

全部剥がすと、

Mainはこう
Mainはこう

Mainはこう、

Subはこう
Subはこう

Subはこう、

Thirdはこう
Thirdはこう

Thirdはこう。
全部、フルネームになる。

Sample/android/R.attr/label_application/src/R.attr at master · bg1bgst333/Sample · GitHub

R.attr.label

ActionBarのタイトルは、android:labelで付ける。

R.attr  |  Android Developers

android:titleという属性もあるが、これでは無い模様。
Button2つを用意して、片方でSubActivity、もう片方でThirdActivityを起動するこれまでの構造は同じで、strings.xmlで、

結構大量に文字列を用意。
AndroidManifest.xmlは、

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bgstation0.android.sample.r.attr_"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="15" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/main_title" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SubActivity"
            android:label="@string/second_title"
            android:logo="@drawable/ic_launcher" >
        </activity>
        <activity android:name=".ThirdActivity"
            android:label="@string/third_title"
            android:icon="@drawable/ic_launcher">
        </activity>
    </application>

</manifest>

applicationにapp_name、MainActivityにmain_title、SubActivityにsecond_title、ThirdActivityにthird_titleという感じで、すべてにセットしてる。

Main Title
Main Title

Main Title。
button1で、

Second Title
Second Title

Second Title。
button2で、

Third Title
Third Title

Third Title。
次は、

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bgstation0.android.sample.r.attr_"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="15" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/main_title" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SubActivity"
            android:label="@string/second_title"
            android:logo="@drawable/ic_launcher" >
        </activity>
        <activity android:name=".ThirdActivity"
            android:icon="@drawable/ic_launcher">
        </activity>
    </application>

</manifest>

ThirdActivityだけ、labelを剥がすと、

これだけapp_nameのR.attr_になる。
これだけapp_nameのR.attr_になる。

これだけapp_nameのR.attr_になる。
最後に、

Activityのは全て剥がすと、

Mainはこう
Mainはこう

Mainはこう、

Subはこう
Subはこう

Subはこう、

Thirdはこうなる。
Thirdはこうなる。

Thirdはこうなる。
全部、app_nameのR.attr_になってる。

Sample/android/R.attr/label/src/R.attr at master · bg1bgst333/Sample · GitHub

ActionBar.setLogo

ActionBar.setLogoで、ロゴもセットできる。

ActionBar  |  Android Developers

AndroidManifest.xmlは、

また、Activityを3つ用意。
applicationにだけ、ic_launcherがセットされている。
strings.xmlは、

こんな感じ。
activity_main.xmlは、

Buttonを2つ。
activity_sub.xmlは、

TextView1つ。
activity_third.xmlも、

TextView1つ。
MainActivity.javaは、

まずは、onCreateでicon1をセット。
そして、button1だとSubActivity、button2だとThirdActivityを起動。
SubActivity.javaは、

package com.bgstation0.android.sample.actionbar_;

import android.app.Activity;
import android.os.Bundle;

public class SubActivity extends Activity {

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

まず、この状態に。
ThirdActivity.javaも、

package com.bgstation0.android.sample.actionbar_;

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;

public class ThirdActivity extends Activity {

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

この状態に。

logo1.pngも配置
logo1.pngも配置

logo1.pngも配置。

MainActivityはicon1
MainActivityはicon1

MainActivityはicon1。
button1を押すと、

SubActivityはapplicationのic_launcherに
SubActivityはapplicationのic_launcherに

SubActivityはapplicationのic_launcherに。

次はこうする。

SubActivityもicon1に
SubActivityもicon1に

SubActivityもicon1に。

package com.bgstation0.android.sample.actionbar_;

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;

public class ThirdActivity extends Activity {

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);
        
        // アイコンをセット.
        ActionBar actionBar = getActionBar();	// actionBarを取得.
        actionBar.setIcon(R.drawable.icon1);	// icon1をセット.
        
    }
	
}

次はこう。

ThirdActivityもicon1に
ThirdActivityもicon1に

ThirdActivityもicon1に。

最後は、setLogoでlogo1をセット。

ThirdActivityにlogo1がセットされている
ThirdActivityにlogo1がセットされている

ThirdActivityにlogo1がセットされている。

Sample/android/ActionBar/setLogo/src/ActionBar at master · bg1bgst333/Sample · GitHub

ActionBar.setIcon

ActionBar.setIconで、ソースコード側でアイコンをセットすることもできる。

ActionBar  |  Android Developers

AndroidManifest.xmlで、

android:iconをic_launcherにしたままで、MainActivity.javaも、

package com.bgstation0.android.sample.actionbar_;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

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

こうだと、

当然このまま
当然このまま

当然このままic_launcherが表示。
しかし、

icon1を配置
icon1を配置

icon1を配置し、

onCreateでicon1をセットすると、

ic_launcherがicon1に変わる
ic_launcherがicon1に変わる

ic_launcherがicon1に変わる。
まあ、起動時にアニメーションしちゃいかんので、xmlのほうが最初からicon1になってるかな。

Sample/android/ActionBar/setIcon/src/ActionBar at master · bg1bgst333/Sample · GitHub