GDG presentation hollywood action bar (Leonardo,vingle.inc)

29
Hollywood ActionBar 13th April, 2013 Vingle NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Transcript of GDG presentation hollywood action bar (Leonardo,vingle.inc)

Page 1: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Hollywood ActionBar

13th April, 2013

Vingle

NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 2: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Intro

Kim Tae Hwan25 Software Engineer

SSHS 17th

KAIST CS 07 (1 semester left)

Done Military Service

VINGLE.IncVingleTaeHwan KimPRODUCT COORDINATOR+82 10 7755 [email protected]/THEFINESTARTIST

GET TO KNOWTAEHWAN KIM.

HIS INTERESTS ARECOMPOSING MUSIC.UX DESIGN.SWIMMING.GIRLs.

AND...

LeonardoMusic Off, I'm Sleeping (Android)

Total 2,500,000 Downloads

From Jun, 2011

Music Off, I'm Sleeping (iOS)Total 40,000 Downloads

From Sep, 2012

The Finest ArtistMusiCon (iOS)

Playful Music Player

UX - Design

Not yet launched (80% Done)

We need new members!!

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Kim Tae Hwan Leonardo The Finest ArtistKim Tae Hwan Leonardo The Finest ArtistKim Tae Hwan Leonardo The Finest Artist

VINGLE

GOOGLE PLUS

FACEBOOK

TWITTER

EMAIL

vingle.net/TheFinestArtist

plus.google.com/+TheFinestArtist

facebook.com/TheFinestArtist

twitter.com/TheFinestArtist

[email protected]

Intro

Content

Code

Custom

Q&A

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 3: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Content 어떻게 반복되는 Action을 빠르게 할것인가?

반복되는 Action○ 검색

○ 새로고침

○ 작성

○ 공유하기

○ 노티

○ etc

뒤로가기

& Top of the Screen

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 4: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Content ActionBar is a branded Top bar of App

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 5: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Content 액션바의 구성

Main ActionBarTop Bar

Bottom Bar

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 6: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Code 액션바 추가

<application

android:name="com.example.android"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/SampleTheme">

</application>

<resources>

<style name="SampleTheme" parent="@android:style/Theme">

<item name="android:actionBarStyle">@style/SampleTheme.ActionBar</item>

</style>

<style name="SampleTheme.ActionBar" parent="@android:style/Widget.ActionBar">

<item name="android:background">@color/actionbar_transparency</item>

<item name="android:windowActionBarOverlay">true</item>

<item name="android:displayOptions">useLogo|showHome</item>

</style>

</resources>

Icon & Logo

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 7: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Content 액션바의 구성

View Control

App Icon Action Button

Action Overflow

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 8: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Code 홈버튼

public class MainActivity extends FragmentActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getActionBar().setHomeButtonEnabled(true);

getActionBar().setDisplayHomeAsUpEnabled(true);

getActionBar().setHomeButtonEnabled(false);

getActionBar().setDisplayHomeAsUpEnabled(false);

}

}

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 9: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Custom 홈버튼

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

if (actionBar.getCustomView() != null) {

ViewGroup parent = (ViewGroup) actionBar.getCustomView().getParent();

ViewGroup homeView = (ViewGroup) parent.getChildAt(0);

homeView.setBackgroundResource(R.drawable.selected_button_background);

View up = homeView.getChildAt(0);

up.setVisibility(View.INVISIBLE);

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

ViewGroup parent = (ViewGroup) activity.getWindow().getDecorView();

ViewGroup child1 = (ViewGroup) parent.getChildAt(0);

ViewGroup child2 = (ViewGroup) child1.getChildAt(1);

ViewGroup child3 = (ViewGroup) child2.getChildAt(0);

ViewGroup child4 = (ViewGroup) child3.getChildAt(0);

ViewGroup homeView = (ViewGroup) child4.getChildAt(0);

homeView.setBackgroundResource(R.drawable.selected_button_background);

View up = homeView.getChildAt(0);

up.setVisibility(View.INVISIBLE);

} else {

ViewGroup parent = (ViewGroup) activity.getWindow().getDecorView();

ViewGroup child1 = (ViewGroup) parent.getChildAt(0);

ViewGroup child2 = (ViewGroup) child1.getChildAt(0);

ViewGroup child3 = (ViewGroup) child2.getChildAt(1);

ViewGroup child4 = (ViewGroup) child3.getChildAt(0);

ViewGroup homeView = (ViewGroup) child4.getChildAt(0);

homeView.setBackgroundResource(R.drawable.selected_button_background);

View up = homeView.getChildAt(0);

up.setVisibility(View.INVISIBLE);

}

}VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 10: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Code 타이틀

getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE

|ActionBar.DISPLAY_HOME_AS_UP);

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 11: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Content 타이틀

POSSIBLE?

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 12: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Content 타이틀

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 13: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Custom 타이틀

getActionBar().setLogo(writeOnDrawable(R.drawable.star, "ActionBar"));

public BitmapDrawable writeOnDrawable(int drawableId, String text){

Bitmap bm = BitmapFactory.decodeResource(getResources(),drawableId).

copy(Bitmap.Config.ARGB_8888, true);

Paint paint = new Paint();

paint.setColor(Color.WHITE);

paint.setTextSize(40f);

paint.setAntiAlias(true);

paint.setFakeBoldText(false);

paint.setShadowLayer(2f, 0, 0, Color.GRAY);

paint.setStyle(Paint.Style.STROKE);

paint.setTextAlign(Paint.Align.LEFT);

paint.setTypeface(Typeface.SANS_SERIF);

Bitmap bmBack = Bitmap.createBitmap(270, 67, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(bmBack);

canvas.drawText(text, 79f, (float) (bm.getHeight()/(1.35)), paint);

canvas.drawBitmap(bm, new Matrix(), null);

return new BitmapDrawable(getResources(), bmBack);

}

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NETVINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 14: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Code 타이틀

getActionBar().setCustomView(R.layout.custom_actionbar);

getActionBar().setDisplayShowCustomEnabled(true);

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<ImageView

android:id="@+id/hidden_menu_icon"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_marginRight="16dp"

android:background="@drawable/ad_button_001_sidemenu"

android:visibility="invisible" />

<TextView

android:id="@+id/title"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_toLeftOf="@id/hidden_menu_icon"

android:gravity="center" />

</RelativeLayout>

8+4+Home+4UP

Page 15: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Content View Control

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NETVINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 16: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Code View Control

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

ActionBar actionbar = getSupportActionBar();

actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

ActionBar.Tab TabA = actionbar.newTab().setText("Fragment A");

ActionBar.Tab TabB = actionbar.newTab().setText("Fragment B");

Fragment FragmentA = new Fragment();

Fragment FragmentB = new Fragment();

TabA.setTabListener(new MyTabsListener(FragmentA));

TabB.setTabListener(new MyTabsListener(FragmentB));

actionbar.addTab(TabA);

actionbar.addTab(TabB);

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 17: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Content Action Button

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NETVINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 18: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Code Action Button

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item

android:id="@+id/menu_search"

android:actionViewClass="android.widget.SearchView"

android:icon="@android:drawable/ic_menu_search"

android:showAsAction="always|collapseActionView"

android:title="@string/menu_search"/>

<item

android:id="@+id/menu_share"

android:actionProviderClass="android.widget.ShareActionProvider"

android:showAsAction="ifRoom"

android:title="@string/menu_share"/>

<item

android:id="@+id/action_add"

android:icon="@android:drawable/ic_menu_add"

android:showAsAction="ifRoom"

android:title="@string/menu_add"/>

</menu>

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 19: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Code Action Button

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

ShareActionProvider shareActionProvider

= (ShareActionProvider)menu.findItem(R.id.menu_share).getActionProvider();

Intent shareIntent = new Intent();

shareIntent.setAction(Intent.ACTION_SEND);

shareIntent.putExtra(Intent.EXTRA_TEXT, "http://www.vingle.net");

shareIntent.setType("text/plain");

shareActionProvider.setShareIntent(shareIntent);

return super.onCreateOptionsMenu(menu);

}

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 20: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Content ActionBar & Fragment

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 21: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Content ActionBar & Fragment

Activity Frag A

Style A

Frag B

Style BFrag C

Style C

ActionBar

ActionBarStyle

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 22: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Custom ActionBar & Fragment

ActionBarStyle

public static class ActionBarStyle {

public enum Home {

SIDE_NAVI,

BACK,

NONE

}

public enum Title {

LOGO,

TITLE,

NONE

}

public enum Right {

NOTI,

DONE,

NONE

}

public ActionBarStyle(Home home, Title title, Right button) {

this.home = home;

this.title = title;

this.button = button;

}

}

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NETVINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 23: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Custom ActionBar & Fragment

public abstract class ActionBarFragment extends Fragment {

public ActionBarStyle getActionBarStyle() {

return new ActionBarStyle(Home.SIDE_NAVI, Title.LOGO, Right.NOTI);

}

}

Frag A

Style A

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NETVINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 24: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Custom ActionBar & Fragment

Activity

ActionBar

private void addFragment() {

final FragmentManager fm = getFragmentManager();

final ActionBarFragment frag = new ActionBarFragment();

final OnBackStackChangedListener listener = new OnBackStackChangedListener(){

@Override

public void onBackStackChanged() {

setActionBarStyle(frag.getActionBarStyle());

fm.removeOnBackStackChangedListener(listener);

}

};

fm.addOnBackStackChangedListener(listener);

FragmentTransaction ft = fm.beginTransaction();

ft.add(frag, frag.getClass().getSimpleName());

ft.commit();

}

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NETVINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 25: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Custom ActionBar & Fragment

@Override

public void onBackPressed() {

final FragmentManager fm = getFragmentManager();

final OnBackStackChangedListener listener = new OnBackStackChangedListener(){

@Override

public void onBackStackChanged() {

ActionBarFragment frag = (ActionBarFragment)fm.findFragmentById(id);

setActionBarStyle(frag.getActionBarStyle());

fm.removeOnBackStackChangedListener(listener);

}

};

fm.addOnBackStackChangedListener(listener);

super.onBackPressed();

}

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NETVINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Activity

ActionBar

Page 26: GDG presentation hollywood action bar (Leonardo,vingle.inc)

Custom ActionBar & Fragmentpublic void setActionBarStyle(ActionBarStyle style) {

ActionBar actionBar = getActionBar();

switch (style.getHome()) {

case SIDE_NAVI:

actionBar.setHomeButtonEnabled(true);

actionBar.setDisplayShowHomeEnabled(true);

actionBar.setLogo(R.drawable.side_navi);

break;

case BACK:

actionBar.setHomeButtonEnabled(true);

actionBar.setDisplayShowHomeEnabled(true);

actionBar.setLogo(R.drawable.back);

break;

case NONE:

actionBar.setHomeButtonEnabled(false);

actionBar.setDisplayShowHomeEnabled(false);

actionBar.setLogo(R.drawable.none);

break;

default:

break;

}

}VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NETVINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Activity

ActionBar

Page 27: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Content ActionBar Sherlock

https://github.com/JakeWharton/ActionBarSherlock

Android API 7~

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 28: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Content ActionBar Style Generator

http://jgilfelt.github.io/android-actionbarstylegenerator/

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Page 29: GDG presentation hollywood action bar (Leonardo,vingle.inc)

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET

Q&A Question & Answer

VINGLE • NEVER-ENDING SOCIAL MAGAZINE • WWW.VINGLE.NET