diff --git a/README.md b/README.md index 7b609dd..1d3660e 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ repositories { ``` ```Gradle dependencies { - compile 'rebus:header-view:2.0.0-BETA-5' + compile 'rebus:header-view:2.0.0-BETA-6' } ``` ### How to use @@ -170,6 +170,16 @@ ImageLoader.init(new ImageLoader.ImageLoaderInterface() { }); ``` +#### Use custom font with Calligraphy +You can set a custom font with [Calligraphy](https://github.com/chrisjenx/Calligraphy) just add a CustomViewTypeface with HeaderView.class in CalligraphyConfig +```Java +CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() + .setDefaultFontPath("Oswald-Stencbab.ttf") + .setFontAttrId(R.attr.fontPath) + .addCustomViewWithSetTypeface(HeaderView.class) + .build() +); +``` ### Screen ![Screen](https://raw.githubusercontent.com/rebus007/HeaderView/master/img/screen.png) diff --git a/app/build.gradle b/app/build.gradle index 08d89bc..060fd27 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -49,6 +49,6 @@ dependencies { compile project(':library') compile "com.android.support:appcompat-v7:${var.supportLib}" compile "com.android.support:design:${var.supportLib}" - + compile 'uk.co.chrisjenx:calligraphy:2.3.0' compile 'com.github.bumptech.glide:glide:3.7.0' } diff --git a/app/src/main/assets/Oswald-Stencbab.ttf b/app/src/main/assets/Oswald-Stencbab.ttf new file mode 100644 index 0000000..70acb24 Binary files /dev/null and b/app/src/main/assets/Oswald-Stencbab.ttf differ diff --git a/app/src/main/java/rebus/header/view/sample/CustomApplication.java b/app/src/main/java/rebus/header/view/sample/CustomApplication.java index ba14281..7c92a8a 100644 --- a/app/src/main/java/rebus/header/view/sample/CustomApplication.java +++ b/app/src/main/java/rebus/header/view/sample/CustomApplication.java @@ -30,7 +30,9 @@ import com.bumptech.glide.Glide; +import rebus.header.view.HeaderView; import rebus.header.view.ImageLoader; +import uk.co.chrisjenx.calligraphy.CalligraphyConfig; /** * Created by raphaelbussa on 13/01/17. @@ -65,6 +67,11 @@ public void loadImage(Uri url, ImageView imageView, @ImageLoader.Type int type) } }); - + CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() + .setDefaultFontPath("Oswald-Stencbab.ttf") + .setFontAttrId(R.attr.fontPath) + .addCustomViewWithSetTypeface(HeaderView.class) + .build() + ); } } diff --git a/app/src/main/java/rebus/header/view/sample/MainActivity.java b/app/src/main/java/rebus/header/view/sample/MainActivity.java index 55bd0bd..b55b937 100644 --- a/app/src/main/java/rebus/header/view/sample/MainActivity.java +++ b/app/src/main/java/rebus/header/view/sample/MainActivity.java @@ -24,6 +24,7 @@ package rebus.header.view.sample; +import android.content.Context; import android.os.Bundle; import android.support.design.widget.NavigationView; import android.support.v4.content.ContextCompat; @@ -40,6 +41,7 @@ import rebus.header.view.HeaderView; import rebus.header.view.Item; import rebus.header.view.Profile; +import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; public class MainActivity extends AppCompatActivity { @@ -119,7 +121,7 @@ public void run() { headerView.addProfile(profile, profile2, profile3, profile4); headerView.addDialogItem(item, item2); headerView.setShowAddButton(true); - headerView.setAddIconDrawable(R.drawable.ic_action_settings); + //headerView.setAddIconDrawable(R.drawable.ic_action_settings); headerView.setDialogTitle("Choose account"); headerView.setShowArrow(true); headerView.setOnHeaderClickListener(new View.OnClickListener() { @@ -174,4 +176,9 @@ public boolean onAdd() { } + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); + } + } diff --git a/app/src/main/res/layout/header_drawer.xml b/app/src/main/res/layout/header_drawer.xml index 797c01d..608075b 100644 --- a/app/src/main/res/layout/header_drawer.xml +++ b/app/src/main/res/layout/header_drawer.xml @@ -27,17 +27,20 @@ android:id="@+id/header_view" android:layout_width="match_parent" android:layout_height="wrap_content" - app:hv_add_icon="@drawable/ic_action_settings" app:hv_add_status_bar_height="true" app:hv_background_color="@color/colorPrimaryDark" app:hv_dialog_title="@string/account" app:hv_highlight_color="@color/colorAccent" - app:hv_profile_avatar="@drawable/ic_avatar_batman" - app:hv_profile_background="@drawable/ic_bg_batman" - app:hv_profile_email="batman@gotham.city" - app:hv_profile_username="Bruce Wayne" app:hv_show_add_button="true" app:hv_show_arrow="true" app:hv_show_gradient="true" app:hv_style="normal" - app:hv_theme="light" /> \ No newline at end of file + app:hv_theme="light" /> + + \ No newline at end of file diff --git a/app/src/main/res/menu/drawer.xml b/app/src/main/res/menu/drawer.xml index da81103..0ca57f2 100644 --- a/app/src/main/res/menu/drawer.xml +++ b/app/src/main/res/menu/drawer.xml @@ -25,58 +25,40 @@ + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> + android:title="@string/nav_settings" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6de430d..47e3ee6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ Header View - Search + Settings Account diff --git a/build.gradle b/build.gradle index a4bade7..667ae86 100644 --- a/build.gradle +++ b/build.gradle @@ -27,11 +27,11 @@ buildscript { ext { var = [ compileSdk: 25, - buildTools: "25.0.2", + buildTools: "25.0.3", minSdk : 11, targetSdk : 25, - version : "2.0.0-BETA-5", - supportLib: "25.1.1" + version : "2.0.0-BETA-6", + supportLib: "25.3.1" ] } @@ -39,7 +39,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.3.2' classpath 'com.novoda:bintray-release:0.4.0' } } diff --git a/library/src/main/java/rebus/header/view/HeaderView.java b/library/src/main/java/rebus/header/view/HeaderView.java index 86aa1ac..b4e3b23 100644 --- a/library/src/main/java/rebus/header/view/HeaderView.java +++ b/library/src/main/java/rebus/header/view/HeaderView.java @@ -110,6 +110,8 @@ public class HeaderView extends ViewGroup implements ProfileChooserCallback { private FragmentManager hvFragmentManager; private ProfileChooser profileChooser; + private Typeface typeface; + public HeaderView(Context context) { super(context); init(null, 0); @@ -626,9 +628,10 @@ public void onClick(View v) { if (hvFragmentManager != null) { ProfileChooserFragment profileChooserFragment = ProfileChooserFragment.newInstance(profileSparseArray, itemArrayList, hvHighlightColor, hvShowAddButton, hvDialogTitle, hvAddIconDrawable); profileChooserFragment.setCallback(HeaderView.this); + profileChooserFragment.setTypeface(typeface); profileChooserFragment.show(hvFragmentManager, ProfileChooserFragment.FRAGMENT_TAG); } else { - profileChooser = new ProfileChooser(getContext(), profileSparseArray, itemArrayList, hvHighlightColor, hvShowAddButton, hvDialogTitle, hvAddIconDrawable); + profileChooser = new ProfileChooser(getContext(), profileSparseArray, itemArrayList, hvHighlightColor, hvShowAddButton, hvDialogTitle, hvAddIconDrawable, typeface); profileChooser.setCallback(HeaderView.this); profileChooser.show(); } @@ -809,6 +812,7 @@ protected void onRestoreInstanceState(Parcelable state) { ProfileChooserFragment profileChooserFragment = (ProfileChooserFragment) hvFragmentManager.findFragmentByTag(ProfileChooserFragment.FRAGMENT_TAG); if (profileChooserFragment != null) { profileChooserFragment.setCallback(HeaderView.this); + profileChooserFragment.updateTypeface(typeface); } } super.onRestoreInstanceState(state); @@ -844,4 +848,12 @@ public boolean onAdd() { public @interface Theme { } + @SuppressWarnings("unused") + public void setTypeface(Typeface tf) { + typeface = tf; + username.setTypeface(tf); + email.setTypeface(tf); + invalidate(); + } + } diff --git a/library/src/main/java/rebus/header/view/ProfileChooser.java b/library/src/main/java/rebus/header/view/ProfileChooser.java index 0cf579b..1357989 100644 --- a/library/src/main/java/rebus/header/view/ProfileChooser.java +++ b/library/src/main/java/rebus/header/view/ProfileChooser.java @@ -28,6 +28,7 @@ import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; +import android.graphics.Typeface; import android.util.SparseArray; import android.view.Gravity; import android.view.View; @@ -48,7 +49,7 @@ class ProfileChooser extends Dialog { private ProfileChooserCallback callback; @SuppressLint("RtlHardcoded") - ProfileChooser(Context context, SparseArray profileSparseArray, ArrayList items, int accent, boolean showAdd, String titleValue, int icon) { + ProfileChooser(Context context, SparseArray profileSparseArray, ArrayList items, int accent, boolean showAdd, String titleValue, int icon, Typeface tf) { super(context); this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.setContentView(R.layout.hw_account_chooser); @@ -61,6 +62,7 @@ class ProfileChooser extends Dialog { title.setTextColor(Utils.getTextColorPrimary(context)); title.setText(titleValue); title.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT)); + if (tf != null) title.setTypeface(tf); add.setVisibility(showAdd ? View.VISIBLE : View.INVISIBLE); add.setColorFilter(Utils.getTextColorPrimary(context)); add.setBackgroundResource(Utils.selectableItemBackgroundBorderless(context)); @@ -78,6 +80,7 @@ public void onClick(View v) { Profile profile = profileSparseArray.valueAt(i); if (profile.getId() != 1) { RowProfileView profileView = new RowProfileView(context); + profileView.setTypeface(tf); profileView.setProfile(profile, i == 0); profileView.setAccent(accent); profileView.setOnClickListener(new View.OnClickListener() { @@ -99,6 +102,7 @@ public void onClick(View v) { for (Item item : items) { TextView textView = new TextView(context); textView.setText(item.getTitle()); + if (tf != null) textView.setTypeface(tf); textView.setTag(item.getId()); textView.setBackgroundResource(Utils.selectableItemBackground(context)); textView.setPadding(padding, padding / 2, padding, padding / 2); diff --git a/library/src/main/java/rebus/header/view/ProfileChooserFragment.java b/library/src/main/java/rebus/header/view/ProfileChooserFragment.java index e27a719..77326a2 100644 --- a/library/src/main/java/rebus/header/view/ProfileChooserFragment.java +++ b/library/src/main/java/rebus/header/view/ProfileChooserFragment.java @@ -26,6 +26,7 @@ import android.annotation.SuppressLint; import android.app.DialogFragment; +import android.graphics.Typeface; import android.os.Bundle; import android.support.annotation.Nullable; import android.util.SparseArray; @@ -54,6 +55,7 @@ public class ProfileChooserFragment extends DialogFragment { private ImageView add; private ProfileChooserCallback callback; + private Typeface typeface; private boolean hvIsRTL; public static ProfileChooserFragment newInstance(SparseArray profileSparseArray, ArrayList items, int accent, boolean showAdd, String titleValue, int icon) { @@ -97,6 +99,7 @@ public void onViewCreated(View view, Bundle savedInstanceState) { title.setTextColor(Utils.getTextColorPrimary(getActivity())); title.setText(titleValue); title.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT)); + if (typeface != null) title.setTypeface(typeface); add.setVisibility(showAdd ? View.VISIBLE : View.INVISIBLE); add.setColorFilter(Utils.getTextColorPrimary(getActivity())); add.setBackgroundResource(Utils.selectableItemBackgroundBorderless(getActivity())); @@ -115,6 +118,7 @@ public void onClick(View v) { Profile profile = profileSparseArray.valueAt(i); if (profile.getId() != 1) { RowProfileView profileView = new RowProfileView(getActivity()); + profileView.setTypeface(typeface); profileView.setProfile(profile, i == 0); profileView.setAccent(accent); profileView.setOnClickListener(new View.OnClickListener() { @@ -138,6 +142,7 @@ public void onClick(View v) { for (Item item : items) { TextView textView = new TextView(getActivity()); textView.setText(item.getTitle()); + if (typeface != null) textView.setTypeface(typeface); textView.setTag(item.getId()); textView.setBackgroundResource(Utils.selectableItemBackground(getActivity())); textView.setPadding(padding, padding / 2, padding, padding / 2); @@ -163,4 +168,27 @@ public void setCallback(ProfileChooserCallback callback) { this.callback = callback; } + public void updateTypeface(Typeface tf) { + if (tf == null) return; + setTypeface(tf); + for (int i = 0; i < linearLayout.getChildCount(); i++) { + View view = linearLayout.getChildAt(i); + if (view instanceof RowProfileView) { + ((RowProfileView) view).setTypeface(typeface); + } + } + for (int i = 0; i < linearLayout1.getChildCount(); i++) { + View view = linearLayout1.getChildAt(i); + if (view instanceof TextView) { + ((TextView) view).setTypeface(typeface); + } + } + title.setTypeface(typeface); + } + + public void setTypeface(Typeface tf) { + if (tf == null) return; + typeface = tf; + } + } diff --git a/library/src/main/java/rebus/header/view/RowProfileView.java b/library/src/main/java/rebus/header/view/RowProfileView.java index eec2a8b..5248fcc 100644 --- a/library/src/main/java/rebus/header/view/RowProfileView.java +++ b/library/src/main/java/rebus/header/view/RowProfileView.java @@ -63,6 +63,8 @@ class RowProfileView extends ViewGroup { private int accent = Color.BLACK; + private Typeface typeface; + public RowProfileView(Context context) { super(context); init(); @@ -108,8 +110,13 @@ public void setProfile(Profile profile, boolean active) { avatar.setPadding(hvRowAvatarBorderDimen, hvRowAvatarBorderDimen, hvRowAvatarBorderDimen, hvRowAvatarBorderDimen); } check.setVisibility(hvActive ? VISIBLE : INVISIBLE); - username.setTypeface(active ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT); - email.setTypeface(active ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT); + if (typeface != null) { + username.setTypeface(typeface); + email.setTypeface(typeface); + } else { + username.setTypeface(active ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT); + email.setTypeface(active ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT); + } username.setText(hvProfile.getUsername()); email.setText(hvProfile.getEmail()); if (hvProfile.getAvatarRes() != 0) @@ -201,4 +208,11 @@ protected void onLayout(boolean changed, int l, int t, int r, int b) { } } + public void setTypeface(Typeface tf) { + if (tf == null) return; + typeface = tf; + username.setTypeface(tf); + email.setTypeface(tf); + } + }